Загрузил Семён Мартыненко

Unix i Linux rukovodstvo sistemnogo administratora 2020 Nemet Evi Snayder Gart Kheyn Trent Ueyli Ben Makin Den

реклама
UNIX
И
LINUX
РУКОВОДСТВО
СИСТЕМНОГО
АДМИНИСТРАТОРА
5-е издание
UNIX® AND LINUX® SYSTEM
ADMINISTRATION
HANDBOOK
-------
FIFTH EDITION
------
Evi Nemeth
Garth Snyder
Trent R. Hein
Веп Whaley
DanMackin
with James Garnett, Fabrizio Branca, and Adrian Mouat
Boston • Columbus • lndianapolis • New York • San Francisco • Amsterdam • С а р е Town
Dubai • London • Madrid • Milan • Munich • Paris • Montreal • Toronto • Delhi • Mexico City
Sao Paulo • Sydney • Hong Kong • Seoul • Singapore • Taipei • Tokyo
UNIXИLINUX
РУКОВОДСТВО
СИСТЕМНОГО
АДМИНИСТРАТОРА
---- 5-еиздание
----
ЭвиНемет,
Гарт Снайдер,
ТрентХейн,
Бэн Уэйли,
ДэнМакин
при участии Джеймса Гарнетта, Фабрицио Бранка и Адриана Муата
Москва • Санкт-Петербург
2020
Б Б К 32.973 .26-0 1 8 . 2 . 75
Н 50
УД К 68 1 . 3 . 07
ООО "Ди ал е кти ка"
Зав. редакцией С.Н. Тригуб
Перевод с англ ийского и редакция докт. физ.-мат. наукД.А. Клюшина
По общим вопросам обращайтесь в издательство "Диалектика" по адресу:
[email protected] , http://www. dialektika.com
Немет, Эви, Снайдер, Гарт, ХеАн, Тре нт, УэАли, Бен , Макни, Дэ н
Н 50
.
Uпix и Linux: руководство системною администратора, 5-е изд.: Пер. с ан гл .
СПб. : ООО "Диалектика" , 2020. - 1 1 68 с. : ил.
П арал . тит. англ.
-
-
ISBN 978-5-907 1 44- 1 0- 1 (рус . )
ББК 32.973.26-018.2.75
Все названия про11Jаммных продуктов являются зарегистрированными торговыми марками со­
ответствующих фирм.
Никакая часть настоящего издания ни в каких целях не может быть воспроизведена в какой
бы то ни было форме и какими бы то ни было средствами , будь то электронные или механические,
включая фотокопирование и запись на магнитный носитель, если на это нет письменного разре­
шения и111ательства Addisoп-�sley PuЫishiпg Company, lnc.
Copyright © 2020 Ьу Dialektika Computer PuЫishing Ltd.
Authorized Russian translation of the English edition of UNIX and Linux System Administration
Handbook, 5th Edition (ISBN 978-0-13-427755-4) © 2018 Pearson Education lnc.
T his translation is puЫished and sold Ьу permission of Pearson Education lnc., which owns or contгols
all rights to puЫish and sell the same.
All rights reserved. N o ра11 of this book may Ье reproduced or transmitted in any form or Ьу any means,
electronic or mechanical, including photocopying, recording, or Ьу any information storage or retrieval sys­
tem, without the prior written permission of the copyright owner and the PuЫisher.
Научно-популярное издание
Эви Немет, Iарт Снайдер, '!Рент ХеАн, Бен Уэйли, Дэн Макни
Unix и Linux: руководство системного администратора
5-е издание
Подписано в печать 24.03.2020. Формат 70х100/16
Гарнитура Times
Усл. печ. л. 94, 17. Уч.-и111. л. 81,2
Тираж 500 экз. Заказ No 2141
Отпечатано в АО "Первая Образцовая типо11>афия"
Филиал "Чеховский Печатный Двор"
142300, Московская область, r. Чехов, ул. Поли11>афистов, д. 1
Сайт: www.chpd.ru, E-mail: [email protected], тел. 8 (499) 270-73-59
ООО "Диалектика", 195027, Санкт-Петербург, Магнитогорская ул" д. 30, лит. А, пом. 848
ISBN 978-5-907144-IO-l (рус.)
ISBN 978-0-13-427755-4 (англ.)
© ООО "Диалектика", 2020
© Pearson Education, 1 nc" 2018
Оглавление
Предисловие
36
Введение
38
частьl.Основыадминистрирования
41
43
69
103
127
155
187
215
273
299
321
351
383
Глава 1. С чего начать
Глава 2. Загрузка и системные демоны
Глава 3. Управление доступом и привилегии суперпользователя
Глава 4. Управление процессами
Глава 5. Файловая система
Глава 6. Инсталляция и управление программным обеспечением
Глава 7. Сценарии и командная оболочка
Глава 8. Управление учетными записями пользователей
Глава 9. Облачные вычисления
Глава 10. Журналирование
Глава 11. Драйверы и ядро
Глава 12. Печать
часть 11. Работа в сетях
Глава 13. Сети TCP/IP
Глава 14. Сетевые аппаратные средства
Глава 15. JР-маршрутизация
Глава 16. DNS: система доменных имен
Глава 17. Система единого входа
Глава 18. Электронная почта
Глава 19. Веб-хостинг
Часть 111. Хранение данных
Глава 20. Дисковая память
Глава 21. Сетевая файловая система N FS
Глава 22. Файловая система SMB
частьlV.Эксплvатация
Глава 23. Управление конфигурацией
Глава 24. Виртуализация
Глава 25. Контейнеры
Глава 26. Непрерывная интеграция и доставка
Глава 27. Безопасность
Глава 28. Мониторинг
Глава 29. Анализ производительности
Глава 30. Центры обработки данных
Глава 31. Методология, политика и стратегии
Краткая история системного администрирования
Предметный указатель
395
397
477
499
517
595
613
689
729
731
805
833
845
847
909
923
955
985
1043
1071
1093
1107
1139
1149
Содержание
О соавторах
Об авторах
Памяти Эви
33
Предисловие
36
36
37
37
Организация книги
Авторы
Контактная информация
Введение
34
35
Благодарности
От издательства
38
39
40
Часть I. Основы администрирования
41
Глава 1. С чего начать
43
44
44
44
44
44
45
45
45
45
46
46
46
46
46
47
48
49
50
51
52
53
54
54
55
55
56
56
56
1.1. Основные обязанности системного администратора
Управление доступом
Добавление оборудования
Автоматизация задач
Управление резервными копиями
Установка и обновление программного обеспечения
Мониторинг
Исправление проблем
Ведение локальной документации
Бдительный мониторинг безопасности
Настройка производительности
Разработка правил
Работа с поставщиками
Тушение пожаров
1.2. Предварительный опыт
1.3. Дистрибутивы Linux
1.4. Примеры систем, используемых в этой книге
Примеры дистрибутивов Linux
Пример дистрибутива UNIX
1.5. Обозначения и типографские соглашения
1.6. Единицы измерения
1.7. Man-страницы и другая онлайн-документация
Организация man-страниц
Команда man: чтение страниц интерактивного руководства
Хранение страниц интерактивного руководства
1.8. Другая официальная документация
Руководства по конкретным системам
Документация по конкретным пакетам
Содержание
7
Книги
Документы RFC
1.9. Другие источники информации
Сохранение актуальности
Практические руководства и справочные сайты
Конференции
1.10. Способы поиска и установки программного обеспечения
Как определить, установлено ли программное обеспечение
Добавление нового программного обеспечения
Создание программного обеспечения из исходного кода
Установка с помощью веб-сценария
1.11. Где разместить программное обеспечение
1.12. Специализация и смежные дисциплины
Методология DevOps
Инженеры по надежности сайтов
Инженеры по безопасности
Сетевые администраторы
Администраторы баз данных
Инженеры центра сетевых операций
Технические специалисты центров обработки данных
Архитекторы
1.13. Литература
Системное администрирование и методология DevOps
Важные инструменты
57
57
57
58
58
59
60
60
61
63
64
65
66
66
66
66
66
67
67
67
67
67
68
68
Глава 2. Загрузка и системные демоны
69
69
70
71
72
72
74
74
74
76
76
77
77
78
78
79
79
80
80
81
82
82
2.1. Обзор процесса загрузки
2.2. Системные прошивки
BIOS или UEFI
Устаревший интерфейс BIOS
UEFI
2.3. Загрузчики
2.4. GRUB: универсальный загрузчик
Конфигурация GRUB
Командная строка GRUB
Параметры ядра Linux
2.5. Процесс загрузки FreeBSD
Вариант BIOS: boot0
Вариант UEFI
Конфигурация загрузчика
Команды загрузчика loader
2.6. Демоны управления системой
Обязанности демона init
Реализации демона init
Традиционный стиль init
Менеджер systemd против остального мира
Аргументы против init
8
Содержание
2.7. Менеджер systemd в деталях
Модули и модульные файлы
Команда systemctl: управление менеджером systemd
Состояние модуля
Цели
Зависимости между модулями
Порядок выполнения
Более сложный пример файла
Локальные службы и настройки
Предостережения об управлении службами и запуском
Журнал systemd
2.8. Сценарии инициализации и запуска системы FreeBSD
2.9. Процедуры перезагрузки и выключения
Выключение физических систем
Выключение облачных систем
2.10. Что делать, если система не грузится?
Однопользовательский режим
Однопользовательский режим в системе FreeBSD
Однопользовательский режим с загрузчиком GRUB
Восстановление облачных систем
83
83
84
85
87
88
90
90
91
92
94
95
96
97
97
97
98
99
100
100
Глава 3. Управление доступом и привилегии суперпользователя
103
104
104
105
106
106
107
107
108
108
115
116
117
118
118
119
119
120
120
121
121
122
123
123
125
126
3.1. Стандартное управление доступом в UNIX
Контроль доступа к файловой системе
Владение процессом
Учетная запись суперпользователя root
Установка флагов setuid и setgid
3.2. Управление учетной записью root
Вход в учетную запись root
Команда su: замена идентификатора пользователя
Программа sudo: ограниченный вариант команды su
Отключение учетной записи root
Системные учетные записи, отличные от root
3.3. Расширения стандартной модели контроля доступа
Недостатки стандартной модели
PAM: подключаемые модули аутентификации
Kerberos: сетевая криптографическая аутентификация
Списки управления доступом к файловой системе
Возможности Linux
Пространства имен Linux
3.4. Современный контроль доступа
Отдельные экосистемы
Обязательный контроль доступа
Контроль доступа на основе ролей
SELinux: улучшенная безопасность Linux
AppArmor
3.5. Литература
Содержание
Глава 4. Управление процессами
4.1. Компоненты процесса
Идентификатор процесса PID
Идентификатор родительского процесса PPID
Идентификатор пользователя UID и текущий идентификатор
пользователя EUID
Идентификатор группы (GID) и текущий
идентификатор группы (EGID)
Фактор уступчивости
Управляющий терминал
4.2. Жизненный цикл процесса
Сигналы
Команда kill: отправка сигналов
Состояния процессов и потоков
4.3. Команда ps: текущий контроль процессов
4.4. Интерактивный мониторинг процессов с помощью команды top
4.5. Команды nice и renice: изменение приоритета выполнения
4.6. Файловая система /proc
4.7. Команды strace и truss: отслеживание сигналов
и системных вызовов
4.8. Процессы, вышедшие из-под контроля
4.9. Периодические процессы
Демон cron: команды расписания
Системные таймеры
Общее использование запланированных задач
Глава 5. Файловая система
5.1. Имена путей
5.2. Монтирование и демонтирование файловой системы
5.3. Структура файлового дерева
5.4. Типы файлов
Обычные файлы
Каталоги
Жесткая ссылка
Файлы символьных и блочных устройств
Локальные сокеты
Именованные каналы
Символические ссылки
5.5. Атрибуты файлов
Биты режима
Биты setuid и setgid
Дополнительный бит
Команда ls: просмотр атрибутов файла
Команда chmod: изменение прав доступа
Команды chown и chgrp: смена владельца и группы
Команда umask: задание стандартных прав доступа
Дополнительные флаги в системе Linux
9
127
127
128
128
129
129
130
130
130
131
133
134
135
137
139
140
141
143
145
145
150
153
155
157
157
160
162
164
164
164
165
166
166
166
167
167
168
169
169
170
172
173
173
10
Содержание
5.6. Списки управления доступом
Предупреждение
Типы ACL
Реализация списков ACL
Поддержка ACL в системе Linux
Поддержка ACL в системе FreeBSD
Обзор POSIX ACL
Списки NFSv4 ACL
175
175
176
176
177
177
178
181
Глава 6. Инсталляция и управление программным обеспечением
187
188
188
189
6.1. Инсталляция операционных систем
Загрузка по сети на персональном компьютере
Настройка PXE
Использование Kickstart — автоматизированного
инсталлятора Red Hat и CentOS
Автоматизированная инсталляция систем Debian и Ubuntu
6.2. Управление пакетами
6.3. Системы управления пакетами для Linux
Команда rpm: управление пакетами RPM
Команда dpkg: управление пакетами .deb
6.4. Использование высокоуровневых систем управления
пакетами в системе Linux
Хранилища пакетов
APT: усовершенствованное средство управления пакетами
Настройка конфигурации хранилища
Пример файла /etc/apt/sources.list
Создание локального зеркала хранилища
Автоматизация работы системы APT
Система yum: управление выпусками для RPM
6.5. Управление программным обеспечением в системе FreeBSD
Базовая система
Менеджер пакетов pkg в системе FreeBSD
Коллекция портов
6.6. Локализация и настройка конфигурации программного обеспечения
Организация локализации
Структурные изменения
Ограничение количества выпусков
Тестирование
6.7. Литература
Глава 7. Сценарии и командная оболочка
7.1. Основы сценариев
Создание микросценариев
Хорошо изучите несколько инструментов
Автоматизируйте все, что возможно
Избегайте преждевременной оптимизации
190
193
196
198
198
199
200
201
203
204
205
206
206
207
208
209
209
210
211
212
212
213
213
214
215
216
216
217
217
218
Содержание
11
Выберите правильный язык сценариев
Следуйте рекомендациям
7.2. Основы работы с оболочками
Редактирование команд
Каналы и перенаправление потоков
Использование переменных и кавычек
Переменные окружения
Команды фильтрации
7.3. Написание сценариев для оболочки sh
Выполнение
От команд к сценариям
Ввод и вывод данных
Пробелы в именах файлов
Функции и аргументы командной строки
Поток управления
Циклы
Арифметика
7.4. Регулярные выражения
Процесс сопоставления
Литеральные символы
Специальные символы
Примеры использования регулярных выражений
Захваты
Жадность, леность и катастрофический поиск с возвратом
7.5. Программирование на языке Python
Страсти по Python 3
Python 2 или Python 3?
Краткое введение в язык Python
Объекты, строки, числа, списки, словари, кортежи и файлы
Пример проверки ввода
Циклы
7.6. Программирование на языке Ruby
Инсталляция
Краткое введение в язык Ruby
Блоки
Символы и хеши опций
Регулярные выражения в языке Ruby
Язык Ruby как фильтр
7.7. Управление библиотекой и средой для Python и Ruby
Поиск и установка пакетов
Создание воспроизводимых сред
Несколько сред
7.8. Контроль версий с помощью системы Git
Простой пример Git
Ловушки Git
Коллективное кодирование с помощью системы Git
218
220
222
223
223
225
226
227
230
231
232
234
235
235
237
239
241
241
242
242
242
244
245
246
247
247
248
249
250
252
253
254
255
255
256
258
259
260
260
261
261
262
265
267
269
269
12
Содержание
7.9. Литература
Оболочки и сценарии оболочки
Регулярные выражения
Python
Ruby
271
271
271
272
272
Глава 8. Управление учетными записями пользователей
273
274
274
275
276
278
278
279
279
280
280
282
282
283
284
285
286
287
8.1. Основы управления учетными записями
8.2. Файл /etc/passwd
Регистрационное имя
Зашифрованные пароли
Идентификатор пользователя
Идентификатор группы по умолчанию
Поле GECOS
Домашний каталог
Регистрационная оболочка
8.3. Файлы /etc/shadow
8.4. Файлы /etc/master.passwd и /etc/login.conf в системе FreeBSD
Файл /etc/master.passwd
Файл /etc/login.conf
8.5. Файл /etc/group
8.6. Подключение пользователей вручную: основные действия
Редактирование файлов passwd и group
Задание пароля
Создание домашнего каталога пользователя и инсталляция
конфигурационных файлов
Установка прав доступа и владения
Конфигурирование ролей и административных привилегий
Заключительные действия
8.7. Добавление пользователей с помощью сценариев:
useradd, adduser и newusers
Команда useradd в системе Linux
Команда adduser в системах Debian и Ubuntu
Команда adduser в системе FreeBSD
Команда newusers в системе Linux: добавление
пользователей пакетом
8.8. Безопасное удаление учетных записей пользователей и файлов
8.9. Блокирование регистрационных имен пользователей
8.10. Уменьшение риска с помощью модулей PAM
8.11. Централизация управления учетными записями
Протокол LDAP и служба Active Directory
Системы “единого входа”
Системы управления учетными данными
Глава 9. Облачные вычисления
9.1. Облако в контексте
9.2. Выбор облачной платформы
Публичные, частные и гибридные облака
287
289
289
290
290
291
292
292
293
294
295
296
296
296
297
297
299
300
301
302
Содержание
13
Amazon Web Services
Google Cloud Platform
DigitalOcean
9.3. Основы работы с облачными службами
Доступ к облаку
Регионы и зоны доступности
Виртуальные частные серверы
Сети
Хранилище
Идентификация и авторизация
Автоматизация
9.4. Облака: быстрый запуск VPS на платформе
Веб-службы Amazon
Интерфейс aws: управление подсистемами AWS
Google Cloud Platform
DigitalOcean
9.5. Контроль затрат
9.6. Литература
303
303
304
304
306
306
308
308
309
310
310
311
311
312
315
317
318
320
Глава 10. Журналирование
321
323
325
325
326
327
328
328
329
330
331
331
332
340
343
344
345
345
346
347
347
348
348
349
10.1. Местоположение файлов регистрации
Специальные журнальные файлы
Как просмотреть записи в журнале systemd
10.2. Журнал systemd
Настройка журнала systemd
Добавление дополнительных параметров фильтрации для журнала
Совместное использование с системой Syslog
10.3. Система Syslog
Чтение сообщений системы Syslog
Архитектура системы Rsyslog
Версии Rsyslog
Конфигурация Rsyslog
Примеры конфигурационных файлов
Отладка системы Syslog
10.4. Журнальная регистрация на уровне ядра и на этапе начальной загрузки
10.5. Управление журнальными файлами и их ротация
Утилита logrotate: кросс-платформенное управление журналами
Утилита newsyslog: управление журналами в системе FreeBSD
10.6. Управление журналами в крупном масштабе
Стек ELK
Graylog
Журналирование как услуга
10.7. Принципы обработки журнальных файлов
Глава 11. Драйверы и ядро
11.1. Ядра и системное администрирование
11.2. Нумерация версий ядра
351
352
353
14
Содержание
Версии ядер для системы Linux
Версии ядер FreeBSD
11.3. Устройства и их драйверы
Файлы и номера устройств
Проблемы управления файлами устройств
Создание файлов устройств
Управление современными файловыми системами
Управление устройствами в Linux
Создание правил и постоянных имен
Управление устройствами в системе FreeBSD
11.4. Конфигурирование ядра Linux
Конфигурирование параметров ядра linux
Сборка ядра
Добавление драйвера устройства в Linux
11.5. Конфигурация ядра системы FreeBSD
Настройка параметров ядра FreeBSD
Сборка ядра FreeBSD
11.6. Загружаемые модули ядра
Загружаемые модули ядра в Linux
Загружаемые модули ядра в системе FreeBSD
11.7. Загрузка
Загрузочные сообщения системы Linux
Загрузочные сообщения системы FreeBSD
11.8. Загрузка альтернативных ядер в облаке
11.9. Ошибки ядра
Ошибки ядра Linux
Паника ядра в системе FreeBSD
11.10. Литература
353
353
354
354
356
356
356
357
359
362
364
364
366
368
368
368
369
370
371
372
373
373
377
378
379
380
382
382
Глава 12. Печать
383
384
384
385
385
386
386
387
388
388
389
389
390
390
391
392
392
392
12.1. Система печати CUPS
Интерфейсы для системы печати
Очередь на печать
Множество принтеров
Экземпляры принтеров
Сетевая печать
Фильтры
12.2. Управление сервером CUPS
Настройка сетевого сервера печати
Автоматическое конфигурирование принтера
Конфигурирование сетевых принтеров
Примеры конфигурирования принтеров
Отключение принтера
Другие связанные с конфигурированием задачи
12.3. Советы по выявлению проблем
Повторный запуск демона печати
Регистрационные журналы
Содержание
15
Проблемы с прямой печатью
Проблемы с печатью в сети
12.4. Литература
393
393
394
Часть II. Работа в сетях
395
Глава 13. Сети TCP/IP
397
397
398
399
400
401
403
404
405
405
406
407
407
408
409
409
410
13.1. Система TCP/IP и Интернет
Кто управляет Интернетом
Сетевые стандарты и документация
13.2. Основы работы в сети
Версии IPv4 и IPv6
Пакеты и их инкапсуляция
Стандарты формирования фреймов Ethernet
13.3. Адресация пакетов
Аппаратная адресация (MAC)
IP-адресация
“Адресация” имен машин
Порты
Типы адресов
13.4. IP-адреса
Классы адресов в протоколе IPv4
Подсети IPv4
Трюки и инструменты для арифметических вычислений,
связанных с подсетями
CIDR: протокол бесклассовой междоменной маршрутизации
Выделение адресов
Частные адреса и система NAT
Адресация в стандарте IPv6
13.5. Маршрутизация
Таблицы маршрутизации
Директивы переадресации протокола ICMP
13.6. ARP: протокол преобразования адресов в IPv4 и IPv6
13.7. DHCP: протокол динамического конфигурирования хостов
Программное обеспечение DHCP
Схема работы DHCP
Программное обеспечение DHCP, созданное организацией ISC
13.8. Вопросы безопасности
Перенаправление IP-пакетов
Директивы переадресации протокола ICMP
Маршрутизация по адресу отправителя
Широковещательные пакеты эхо-запросов и другие виды
направленных широковещательных сообщений
Подмена IP-адресов
Встроенные брандмауэры
Виртуальные частные сети
13.9. Основы конфигурирования сети
Присвоение сетевых имен и IP-адресов
411
412
413
413
415
419
419
421
422
423
423
424
425
426
426
426
427
427
427
428
429
430
430
16
Содержание
Настройка сетевых интерфейсов и протокола IP
Настройка маршрутизации
Конфигурирование DNS
Сетевое конфигурирование в различных системах
13.10. Сетевое конфигурирование в системе Linux
Программа NetworkManager
Команда ip: ручное конфигурирование сети
Сетевое конфигурирование в системе Ubuntu
Сетевое конфигурирование в системе Red Hat и CentOS
Настройка сетевого оборудования в системе Linux
Опции протокола Linux TCP/IP
Переменные ядра, связанные с безопасностью
13.11. Сеть FreeBSD
Команда ifconfig: настройка сетевых интерфейсов
Конфигурация сетевого оборудования в системе FreeBSD
Конфигурирование сети во время загрузки системы FreeBSD
Конфигурирование протокола TCP/IP в системе FreeBSD
13.12. Сетевые проблемы
Команда ping: проверьте, работает ли хост
Команда traceroute: трассировка IP-пакетов
Пакетные анализаторы трафика
Утилита tcpdump: пакетный анализатор трафика из командной строки
13.13. Мониторинг сети
Программа SmokePing: постепенный сбор статистики об эхо-запросах
Программа iPerf: отслеживание производительности сети
Программа Cacti: сбор и отображение данных
13.14. Брандмауэры и система NAT
Утилита iptables в системе Linux: правила, цепочки и таблицы
IPFilter для UNIX-систем
13.15. Облачные сети
Виртуальное частное облако AWS (VPC)
Сеть на платформе Google Cloud Platform
Сеть DigitalOcean
13.16. Литература
История
Классика
Протоколы
432
433
435
435
436
436
437
438
438
440
441
443
444
444
445
445
445
446
447
449
452
453
455
455
456
457
458
458
463
465
465
472
473
474
474
474
475
Глава 14. Сетевые аппаратные средства
477
478
479
479
480
482
483
487
487
488
14.1. Технология Ethernet: сетевая панацея
Как работает Ethernet
Топология Ethernet
Неэкранированная витая пара
Оптическое волокно
Соединение и расширение сетей Ethernet
14.2. Беспроводные сети: локальная сеть для кочевников
Стандарты беспроводных сетей
Доступ клиентов к беспроводной сети
Содержание
17
Беспроводные коммутаторы и точки беспроводного доступа
Безопасность беспроводных сетей
14.3. SDN: программно-коммутируемые сети
14.4. Тестирование и отладка сетей
14.5. Прокладка кабелей
Неэкранированная витая пара
Офисные точки подключения
Стандарты кабельных систем
14.6. Проектирование сетей
Структура сети и архитектура здания
Расширение сетей
Перегрузка
Обслуживание и документирование
14.7. Управление сетью
14.8. Рекомендуемые поставщики
Кабели и разъемные соединения
Тестовые приборы
Маршрутизаторы/коммутаторы
14.9. Литература
488
490
491
491
492
492
492
493
494
494
494
495
495
495
496
496
497
497
497
Глава 15. IP-маршрутизация
499
500
503
503
504
505
505
506
506
507
508
508
508
509
510
511
511
512
512
515
15.1. Подробнее о маршрутизации пакетов
15.2. Демоны и протоколы маршрутизации
Дистанционно-векторные протоколы
Топологические протоколы
Метрика стоимости
Внутренние и внешние протоколы
15.3. Основные протоколы маршрутизации
Протоколы RIP и RIPng
Протокол OSPF
Протокол EIGRP
BGP: протокол граничного шлюза
15.4. Многоадресатная координация протокола маршрутизации
15.5. Выбор критериев стратегии маршрутизации
15.6. Демоны маршрутизации
Демон routed: устаревшая реализация в протоколе RIP
Пакет Quagga: основной демон маршрутизации
Маршрутизатор XORP
15.7. Маршрутизаторы Cisco
15.8. Литература
Глава 16. DNS: система доменных имен
16.1. Архитектура DNS
Запросы и ответы
Поставщики услуг DNS
16.2. DNS для поиска
resolv.conf: конфигурация клиентского модуля распознавания
nsswitch.conf: кого я запрашиваю по имени?
517
518
518
519
519
519
520
18
16.3. Пространство имен DNS
Регистрация доменного имени
Создание собственных поддоменов
16.4. Как работает система DNS
Серверы имен
Авторитетные и кеширующие серверы
Рекурсивные и нерекурсивные серверы
Записи о ресурсах
Делегирование
Кеширование и эффективность
Неоднозначные ответы и балансировка загрузки DNS
Отладка с помощью инструментов запросов
16.5. База данных DNS
Команды синтаксического анализатора в файлах зон
Записи о ресурсах
Запись SOA
Записи NS
Записи A
Записи AААА
Записи PTR
Записи MX
Записи CNAME
Записи SRV
Записи TXT
Записи SPF, DKIM и DMARC
Записи о ресурсах DNSSEC
16.6. Программное обеспечение BIND
Компоненты системы BIND
Файлы конфигурации
Инструкция include
Инструкция options
Инструкция acl
Инструкция key (TSIG)
Инструкция server
Инструкция masters
Инструкция logging
Инструкция statistics-channels
Инструкция zone
Инструкция controls для команды rndc
16.7. Расщепление DNS и инструкция view
16.8. Примеры конфигурации системы BIND
Зона локального хоста
Небольшая компания, предоставляющая консалтинговые
услуги в области безопасности
16.9. Обновление файла зоны
Передача зоны
Динамические обновления в системе BIND
Содержание
521
522
522
522
522
523
524
524
525
526
527
527
530
530
531
534
536
537
537
538
539
540
541
542
542
542
543
543
543
545
545
551
552
552
553
553
553
554
557
558
560
560
561
564
565
565
Содержание
19
16.10. Вопросы безопасности DNS
Еще раз о списках управления доступом на сервере BIND
Открытые распознаватели
Работа в виртуальном окружении chroot
Безопасные межсерверные взаимодействия посредством
технологий TSIG и TKEY
Настройка технологии TSIG для сервера BIND
Технология DNSSEC
Правила протокола DNSSEC
Записи о ресурсах DNSSEC
Настройка протокола DNSSEC
Генерирование пар ключей
Подписание зоны
Цепочка доверия в протоколе DNSSEC
Смена ключей DNSSEC
Инструменты DNSSEC
Отладка протокола DNSSEC
16.11. Отладка сервера BIND
Журнальная регистрация на сервере BIND
Некорректное делегирование
16.12. Литература
Книги и другая документация
Ресурсы в Интернете
Документы RFC
568
568
569
570
Глава 17. Система единого входа
17.1. Основные элементы системы единого входа
17.2. LDAP: “облегченные” службы каталогов
Особенности LDAP
Структура данных LDAP
OpenLDAP: традиционный LDAP-сервер с открытым исходным кодом
389 Directory Server: альтернативный LDAP‑сервер
с открытым исходным кодом
Создание LDAP-запросов
Преобразования файлов паролей и групп LDAP
17.3. Использование служб каталогов для входа в систему
Система Kerberos
Демон sssd: служба системной безопасности
nsswitch.conf: переключатель службы имен
Модули PAM: украшение или чудо аутентификации?
17.4. Альтернативные подходы
NIS: сетевая информационная служба
Утилита rsync: более безопасная рассылка файлов
17.5. Литература
Глава 18. Электронная почта
18.1. Архитектура почтовой системы
Пользовательские агенты
570
571
573
574
574
575
576
578
580
580
581
583
584
584
591
592
593
593
593
595
596
597
597
598
599
600
601
602
603
603
606
607
607
610
611
611
611
613
613
614
20
Агенты передачи
Транспортные агенты
Локальные агенты доставки
Хранилища сообщений
Агенты доступа
18.2. Структура почтового сообщения
18.3. Протокол SMTP
Вы прислали мне привет (EHLO)
Коды ошибок протокола SMTP
Аутентификация SMTP
18.4. Спам и вредоносные программы
Подделки
Технология SPF и спецификации Sender ID
Системы DKIM
18.5. Конфиденциальность и шифрование сообщений
18.6. Почтовые псевдонимы
Загрузка псевдонимов из файла
Направление почты в файл
Направление почты в программу
Хешированная база данных псевдонимов
18.7. Конфигурация электронной почты
18.8. Почтовый агент sendmail
Файл переключения
Запуск программы sendmail
Почтовые очереди
Препроцессор m4
Фрагменты конфигурации программы sendmail
Конфигурационный файл, построенный на основе
эталонного файла с расширением .mc
Примитивы конфигурации программы sendmail
Таблицы и базы данных
Обобщенные макросы и функциональные возможности
Конфигурация клиентов
Параметры конфигурации препроцессора m4
Средства программы sendmail для борьбы со спамом
Ретрансляция
Безопасность и программа sendmail
Владельцы файлов
Права доступа
Безопасная пересылка почты в файлы и программы
Опции безопасности
Выполнение программы sendmail в виртуальном каталоге
(для настоящих параноиков)
Отражение атак типа “отказ от обслуживания”
TLS: безопасносный протокол транспортного уровня
Тестирование и отладка программы sendmail
Журнальная регистрация
Содержание
615
615
616
616
616
617
619
620
621
621
622
623
623
624
624
625
627
628
628
628
629
630
631
631
633
634
635
636
637
637
638
643
644
646
646
649
650
651
651
652
653
654
654
655
656
Содержание
21
18.9. Почтовый агент Exim
Инсталляция почтового сервера Exim
Загрузка почтового сервера Exim
Утилиты почтового сервера Exim
Язык конфигурации программы Exim
Файл конфигурации программы Exim
Глобальные параметры
Сканирование содержимого на этапе применения
списков управления доступом
Аутентификаторы
Маршрутизаторы
Транспортные механизмы
Конфигурация retry
Конфигурация перезаписи
Функция локального сканирования
Регистрация
Отладка
18.10. Почтовый агент Postfix
Архитектура системы Postfix
Безопасность
Команды и документация системы Postfix
Конфигурация системы Postfix
Виртуальные домены
Управление доступом
Отладка
18.11. Литература
Литература по программе sendmail
Литература о системе Exim
Литература о системе Postfix
Документы RFC
657
658
659
660
661
661
662
Глава 19. Веб-хостинг
689
689
690
691
694
695
696
696
697
698
699
701
704
705
707
708
709
19.1. HTTP: протокол передачи гипертекста
Унифицированные указатели ресурсов (URL)
Структура транзакции протокола HTTP
Утилита сurl: инструмент командной строки для работы с HTTP
Повторное использование TCP-соединений
HTTP на основе протокола TLS
Виртуальные хосты
19.2. Основы программного обеспечения для веба
Веб-серверы и прокси-сервер протокола HTTP
Балансировщики нагрузки
Кеши
Сети доставки контента
Языки веба
Интерфейсы прикладного программирования (API)
19.3. Облачный веб-хостинг
Сборка или покупка
667
667
668
672
672
673
673
673
674
675
675
677
677
678
682
683
686
687
688
688
688
688
22
Содержание
Платформа как услуга
Статический хостинг содержимого
Бессерверные веб-приложения
19.4. Веб-сервер Apache httpd
Использование веб-сервера httpd
Конфигурация логистики веб-сервера httpd
Настройка виртуального хоста
Базовая аутентификация протокола HTTP
Ведение журнала
19.5. Веб-сервер NGINX
Установка и запуск NGINX
Настройка веб-сервера NGINX
Настройка TLS для NGINX
Балансировка нагрузки с помощью NGINX
19.6. Программное обеспечение HAProxy
Проверки работоспособности
Статистика сервера
Липкие сессии
Прекращение использования TLS
19.7. Литература
709
710
710
711
712
712
714
715
717
718
719
719
722
723
724
725
726
726
727
728
Часть III. Хранение данных
729
Глава 20. Дисковая память
731
732
733
734
735
736
739
742
743
744
744
744
745
746
747
747
748
749
749
750
752
752
753
755
20.1. Добавление диска
Рецепт для Linux
Рецепт для FreeBSD
20.2. Аппаратное обеспечение для хранения данных
Жесткие диски
Твердотельные диски
Гибридные диски
Расширенный формат и блоки по 4 KиБ
20.3. Интерфейсы устройств для хранения данных
Интерфейс SATA
Интерфейс PCI Express
Интерфейс SAS
Интерфейс USB
20.4. Подключение и низкоуровневое управление накопителями
Проверка инсталляции на уровне аппаратного обеспечения
Файлы дисковых устройств
Непостоянные имена устройств
Форматирование дисков и управление сбойными секторами
Безопасное стирание дисков ATA
Команды hdparm и camcontrol: параметры диска и интерфейса (Linux)
Мониторинг жесткого диска с помощью стандарта SMART
20.5. Программное обеспечение накопителей
Отображение устройств в системе Linux
Содержание
23
20.6. Разбиение диска
Традиционное разбиение
Разбиение диска по схеме MBR
Схема GPT: таблица разделов GUID
Разбиение дисков в системе Linux
Разбиение дисков в системе FreeBSD
20.7. Управление логическими томами
Управление логическими томами в системе Linux
Управление логическими томами в FreeBSD
20.8. RAID: избыточные массивы недорогих дисков
Программная и аппаратная реализации системы RAID
Уровни системы RAID
Восстановление диска после сбоя
Недостатки конфигурации RAID 5
Команда mdadm: программное обеспечение RAID в системе Linux
20.9. Файловые системы
20.10. Традиционные файловые системы: UFS, ext4 и XFS
Терминология файловых систем
Полиморфизм файловых систем
Форматирование файловых систем
Команда fsck: проверка и исправление файловых систем
Монтирование файловой системы
Настройка автоматического монтирования
Монтирование USB-накопителя
Включение подкачки
20.11. Файловые системы следующего поколения: ZFS и Btrfs
Копирование при записи
Обнаружение ошибок
Производительность
20.12. Файловая система ZFS: все проблемы решены
ZFS в системе Linux
Архитектура ZFS
Пример: добавление диска
Файловые системы и свойства
Наследование свойств
Один пользователь — одна файловая система
Мгновенные копии и клоны
Неразмеченные логические тома
Управление пулом памяти
20.13. Файловая системы Btrfs:
облегченная версия ZFS для Linux
Btrfs или ZFS
Настройка и преобразование хранилища
Тома и подтома
Снимки тома
Поверхностные копии
20.14. Стратегия резервного копирования данных
20.15. Литература
756
758
759
759
760
760
761
761
766
767
767
767
770
771
772
776
777
778
779
779
779
781
781
784
784
785
785
786
786
787
788
788
789
789
791
792
792
794
794
796
797
797
800
800
801
802
803
24
Содержание
Глава 21. Сетевая файловая система NFS
21.1. Введение в протокол NFS
Конкуренция
Проблемы, связанные с состоянием
Проблемы производительности
Безопасность
21.2. Основные идеи, лежащие в основе протокола NFS
Версии и история протокола
Удаленный вызов процедур
Транспортные протоколы
Состояние
Экспорт файловой системы
Блокировка файлов
Вопросы безопасности
Идентифицирующее отображение в версии 4
Учетные записи root и nobody
Производительность версии 4
21.3. Серверная часть протокола NFS
Файл exports в системе Linux
Файл exports в системе FreeBSD
Демон nfsd: обслуживание файлов
21.4. Клиентская часть протокола NFS
Монтирование файловых систем NFS на этапе начальной загрузки
Ограничения экспорта привилегированными портами
21.5. Идентифицирующее отображение в протоколе NFS 4
21.6. Команда nfsstat: отображение статистики NFS
21.7. Специализированные файловые серверы NFS
21.8. Автоматическое монтирование
Таблицы косвенных назначений
Таблицы прямых назначений
Главные таблицы
Исполняемые таблицы
Видимость программы automount
Реплицированные файловые системы и программа automount
Автоматическое монтирование (V3; все, кроме Linux)
Специфика системы Linux
21.9. Литература
Глава 22. Файловая система SMB
22.1. Samba: сервер SMB для UNIX
22.2. Инсталляция и конфигурации пакета Samba
Совместное использование файлов с локальной аутентификацией
Совместное использование файлов с помощью учетных записей,
прошедших аутентификацию Active Directory
Настройка общих ресурсов
22.3. Монтирование общих SMB-ресурсов
22.4. Просмотр файлов на общих SMB-ресурсах
805
805
806
806
807
807
808
808
809
810
810
810
811
812
813
814
815
815
816
819
820
822
824
824
825
825
826
827
828
829
829
830
830
831
831
832
832
833
834
835
836
836
837
839
840
Содержание
25
22.5. Обеспечение безопасности Samba-сервера
22.6. Отладка Samba-сервера
Запрос состояния Samba-сервера с помощью команды smbstatus
Настройка журнала Samba-сервера
Управление наборами символов
22.7. Литература
840
841
841
842
843
843
Часть IV. Эксплуатация
845
Глава 23. Управление конфигурацией
847
848
848
849
849
851
851
852
852
853
853
854
855
856
856
856
858
859
861
862
863
863
865
866
868
870
870
871
872
874
874
875
875
876
878
879
880
882
884
23.1. Краткое введение в управление конфигурацией
23.2. Опасности управления конфигурацией
23.3. Элементы управления конфигурацией
Операции и параметры
Переменные
Факты
Обработчики изменений
Привязки
Пакеты и репозитории пакетов
Среды
Учет и регистрация клиентов
23.4. Сравнение популярных систем СМ
Терминология
Бизнес-модели
Архитектурные параметры
Параметры языка
Варианты управления зависимостями
Общие комментарии по поводу систему Chef
Общие комментарии по поводу системы Puppet
Общие комментарии по поводу систем Ansible и Salt
Ода YAML
23.5. Введение в систему Ansible
Пример использования системы Ansible
Настройка клиента
Группы клиентов
Присваивание переменных
Динамические и вычисляемые группы клиентов
Списки задач
Параметры состояния
Итерация
Взаимодействие с Jinja
Визуализация шаблона
Привязки: сценарии и файлы сценариев
Роли
Рекомендации по структурированию базы конфигурации
Параметры доступа в системе Ansible
23.6. Введение в систему Salt
Настройка миньонов
26
Содержание
Привязка значения переменной к миньону
Сопоставление миньонов
Состояния системы Salt
Система Salt и препроцессор Jinja
Идентификаторы состояний и зависимости
Функции состояния и выполнения
Параметры и имена
Привязка состояний к миньонам
Состояния высокого уровня
Формулы Salt
Среды
Документация
23.7. Сравнение систем Ansible и Salt
Гибкость развертывания и масштабируемость
Встроенные модули и расширяемость
Безопасность
Разное
23.8. Рекомендации
23.9. Литература
886
887
888
889
891
892
893
896
896
897
898
902
903
903
903
904
904
905
908
Глава 24. Виртуализация
909
910
910
913
913
913
915
915
916
917
24.1. Виртуальный жаргон
Гипервизоры
Динамическая миграция
Образы виртуальных машин
Контейнеризация
24.2. Виртуализация с помощью системы Linux
Платформа Xen
Инсталляция гостевой операционной системы на платформе Xen
Платформа KVM
Инсталляция гостевой операционной системы
на платформе KVM и ее использование
24.3. Система FreeBSD bhyve
24.4. Компания VMWare
24.5. Гипервизор VirtualBox
24.6. Программа Packer
24.7. Программа Vagrant
24.8. Литература
Глава 25. Контейнеры
25.1. Основные концепции
Поддержка ядра
Образы
Сеть
25.2. Докер: механизм с открытым исходным кодом
Базовая архитектура
Инсталляция
Настройка клиента
918
919
919
919
920
922
922
923
924
924
925
926
926
927
928
929
Содержание
27
Методики работы с контейнерами
Тома
Контейнеры данных
Сети Docker
Драйверы хранилищ
Изменение параметров настройки демона dockerd
Сборка образа
Реестры
25.3. Контейнеры на практике
Ведение журнала
Советы по безопасности
Отладка и устранение неполадок
25.4. Создание и управление контейнерными кластерами
Краткий обзор программного обеспечения для управления
контейнерами
Kubernetes
Mesos и Marathon
Менеджер Docker Swarm
Контейнерная служба AWS EC2
25.5. Литература
929
933
934
934
937
938
939
942
944
945
946
948
949
Глава 26. Непрерывная интеграция и доставка
955
957
957
961
961
962
963
965
966
967
967
969
969
970
971
972
973
975
977
980
26.1. Основные концепции
Принципы и практика
Флаги функций
26.2. Конвейеры
Процесс сборки
Тестирование
Развертывание
Методы развертывания с нулевым временем простоя
26.3. Jenkins: сервер автоматизации с открытым исходным кодом
Основные концепции сервера Jenkins
Распределенные сборки
Конвейер как код
26.4. Подход CI/CD на практике
Тривиальное веб-приложение UlsahGo
Модульное тестирование UlsahGo
Знакомство с конвейером Jenkins Pipeline
Создание образа DigitalOcean
Обеспечение единой системы тестирования
Тестирование дроплета
Развертывание приложения UlsahGo на паре дроплетов
и балансировщике нагрузки
Выводы, сделанные из демонстрационного конвейера
26.5. Контейнеры и упрощение среды CI/CD
Контейнеры как среда сборки
Контейнерные образы как артефакты сборки
26.6. Литература
951
951
952
953
953
954
980
981
982
983
983
984
28
Содержание
Глава 27. Безопасность
27.1. Элементы безопасности
27.2. Слабые места в системе защиты
Социальная инженерия
Уязвимости в программах
Распределенные атаки типа “отказ в обслуживании” (DDoS)
Инсайдерская информация
Ошибки конфигурации сети, системы или приложения
27.3. Основные вопросы безопасности
Обновления программного обеспечения
Ненужные службы
Удаленная регистрация событий
Резервные копии
Вирусы и черви
Руткиты
Фильтрация пакетов
Пароли и многофакторная аутентификация
Бдительность
Тестирование приложений на проникновение
27.4. Пароли и учетные записи пользователей
Изменение пароля
Хранилища и депоненты паролей
Устаревание паролей
Групповые и совместно используемые учетные записи
Пользовательские оболочки
Привилегированные учетные записи
27.5. Инструментальные средства защиты
Команда nmap: сканирование сетевых портов
Nessus: сетевой сканер нового поколения
Metasploit: программа для выявления попыток проникновения
Lynis: встроенный аудит безопасности
John the Ripper: средство для выявления слабых паролей
Bro: программная система для распознавания вторжения в сеть
Snort: популярная программная система для распознавания
проникновения в сеть
OSSEC: система для распознавания вторжения в сеть на уровне хоста
Fail2Ban: система отражения атаки методом перебора
27.6. Основы криптографии
Криптография с симметричными ключами
Криптография с открытым ключом
Инфраструктура с открытым ключом
Протокол защиты транспортного уровня TLS
Криптографические хеш-функции
Генерация случайных чисел
Выбор криптографического программного обеспечения
Команда openssl
Отладка TLS-сеанса с сервером
985
986
987
987
988
989
989
990
990
991
992
992
993
993
994
994
995
995
995
996
997
997
998
999
999
999
1000
1000
1002
1002
1003
1003
1004
1005
1005
1008
1008
1009
1009
1010
1012
1012
1014
1015
1016
1017
Содержание
29
PGP: довольно хорошая конфиденциальность
Kerberos: унифицированный подход к сетевой безопасности
27.7. Система SSH
Основы OpenSSH
Клиент ssh
Аутентификация с помощью открытого ключа
Демон ssh-agent
Псевдонимы хостов в файле ~/.ssh/config
Мультиплексирование соединения
Проброс портов
Демон sshd: сервер OpenSSH
Проверка ключа хоста с помощью записи SSHFP
Передача файлов
Альтернативы для безопасного входа в систему
27.8. Брандмауэры
Брандмауэры, фильтрующие пакеты
Принципы фильтрации служб
Брандмауэры, осуществляющие инспекцию пакетов
с отслеживанием состояния соединений
Насколько безопасны брандмауэры
27.9. Виртуальные частные сети (VPN)
Туннели IPsec
Так ли уж нужны виртуальные частные сети
27.10. Сертификаты и стандарты
Сертификаты
Стандарты безопасности
27.11. Источники информации по вопросам обеспечения безопасности
Сервер SecurityFocus.com и списки рассылки BugTraq и OSS
Блог Брюса Шнайера
Отчет компании Verizon Data Breach Investigations
Институт SANS
Информационные ресурсы отдельных дистрибутивов
Другие списки рассылки и веб-сайты
27.12. Что нужно делать в случае атаки на сервер
27.13. Литература
1017
1018
1019
1019
1021
1022
1024
1025
1026
1026
1027
1029
1030
1030
1031
1031
1031
Глава 28. Мониторинг
1043
1044
1044
1045
1045
1046
1047
1047
1048
1049
1050
1052
28.1. Обзор мониторинга
Инструментарий
Типы данных
Ввод и обработка
Уведомления
Контрольные панели и пользовательские интерфейсы
28.2. Культура мониторинга
28.3. Платформы мониторинга
Платформы реального времени с открытым исходным кодом
Платформы временных рядов с открытым исходным кодом
Платформы визуализации данных с открытым исходным кодом
1032
1032
1033
1033
1034
1034
1034
1035
1038
1038
1038
1038
1038
1039
1039
1040
1041
30
Содержание
Коммерческие платформы мониторинга
Размещенные платформы мониторинга
28.4. Сбор данных
StatsD: протокол передачи общих данных
Сбор данных из вывода команды
28.5. Мониторинг сетей
28.6. Мониторинг систем
Команды для мониторинга систем
Сборщик обобщенных системных данных collectd
Утилиты sysdig и dtrace: трассировки выполнения
28.7. Мониторинг приложений
Мониторинг системного журнала
Supervisor + Munin: простой вариант для некоторых
предметных областей
Коммерческие средства мониторинга приложений
28.8. Мониторинг безопасности
Проверка целостности системы
Контроль обнаружения вторжений
28.9. SNMP: простой протокол сетевого управления
Организация протокола SNMP
Операции протокола SNMP
Net-SNMP: средства для серверов
28.10. Советы и рекомендации по мониторингу
28.11. Литература
1052
1053
1054
1054
1056
1057
1058
1059
1059
1060
1061
1061
Глава 29. Анализ производительности
1071
1072
1073
1075
1076
1077
1078
1078
1080
1080
1082
1084
1085
1086
29.1. Принципы настройки производительности
29.2. Способы повышения производительности
29.3. Факторы, влияющие на производительность
29.4. Захваченные циклы центрального процессора
29.5. Как анализировать проблемы производительности
29.6. Проверка производительности системы
Инвентаризуйте свое оборудование
Сбор данных о производительности
Анализ использования центрального процессора
Управление памятью в системе
Анализ использования памяти
Анализ операций обмена с диском
Утилита fio: анализ производительности дисковой подсистемы
Команда sar: сбор статистических данных и генерирование
отчетов по ним
Выбор планировщика ввода-вывода в системах Linux
Программа perf: универсальный профилировщик
системы Linux
29.7. Помогите! Мой сервер тормозит!
29.8. Литература
1062
1062
1063
1063
1065
1065
1066
1067
1067
1069
1070
1087
1088
1089
1090
1092
Содержание
Глава 30. Центры обработки данных
30.1. Стойки
30.2. Электропитание
Требования к электроснабжению стоек
Измерение
Стоимость
Удаленное управление
30.3. Охлаждение и окружающая среда
Оценка нагрузки на систему охлаждения
Теплые и холодные отсеки
Влажность
Мониторинг окружающей среды
30.4. Уровни надежности центров обработки данных
30.5. Безопасность центров обработки данных
Местонахождение
Периметр
Доступ к объекту
Доступ к стойке
30.6. Инструменты
30.7. Литература
Глава 31. Методология, политика и стратегии
31.1. Великая единая теория: DevOps
DevOps — это CLAMS
Системное администрирование в мире DevOps
31.2. Системы управления билетами и задачами
Общие функции билетных систем
Владелец билета
Восприятие пользователями билетных систем
Типовые билетные системы
Диспетчеризация билетов
31.3. Поддержка локальной документации
Инфраструктура как код
Стандарты документации
31.4. Разделение окружающей среды
31.5. Восстановление после аварий
Оценка рисков
Планирование мероприятий по восстановлению
Подбор персонала на случай аварии
Проблемы с безопасностью
31.6. Инструкции и процедуры
Различие между инструкциями и процедурами
Лучшие практики применения инструкций
Процедуры
31.7. Соглашения о качестве оказываемых услуг
Спектр услуг и их описание
31
1093
1094
1094
1096
1098
1098
1098
1098
1099
1101
1102
1102
1103
1103
1104
1104
1104
1105
1105
1106
1107
1108
1109
1112
1113
1113
1114
1115
1116
1116
1117
1118
1118
1119
1120
1120
1121
1123
1123
1124
1125
1126
1126
1127
1127
32
Содержание
Стратегии управления очередями
Показатели соответствия
31.8. Соответствие законам и стандартам
31.9. Правовые вопросы
Конфиденциальность
Реализация политики безопасности
Контроль — это ответственность
Лицензии на программное обеспечение
31.10. Организации, конференции и другие ресурсы
31.11. Литература
1128
1129
1129
1133
1133
1134
1135
1135
1136
1137
Краткая история системного администрирования
1139
1139
Рассвет компьютеризации: системные операторы (1952–1960)
От узкой специализации к работе в режиме
разделения времени (1961–1969)
Рождение UNIX (1969–1973)
UNIX становится знаменитой (1974–1990)
Эра системных администраторов
Документация по системному администрированию и обучение
UNIX при смерти. Рождение Linux (1991–1995)
Мир Windows (1996–1999)
Расцвет UNIX и Linux (2000–2009)
Системы UNIX и Linux в гипермасштабируемом облаке
(2010– настоящее время)
Завтрашний день UNIX и Linux
Литература
Предметный указатель
1140
1140
1142
1143
1145
1145
1146
1147
1147
1148
1148
1149
О соавторах
Джеймс Гарнетт имеет степень доктора компьютерных наук в Уни­
верситете Колорадо и является старшим инженером-программистом
в компании Secure64 Software, Inc., где он разрабатывает технологии
перехода с системы DDoS на ядра Linux. Если он не погружен в код
ядра, значит, он находится где-то в глубине Каскадных гор в штате
Вашингтон.
Фабрицио Бранка (@fbrnc) является ведущим разработчиком систем
в компании AOE. Он, его жена и их двое детей только что вернулись
в Германию после четырех лет жизни в Сан-Франциско. Фабрицио
внес свой вклад в несколько проектов с открытым исходным кодом.
Он фокусируется на архитектуре, инфраструктуре и высокопроизводи­
тельных приложениях. Кроме того, он разрабатывает процессы непре­
рывной разработки, тестирования и развертывания крупных проектов.
Адриан Муат (@adrianmouat) работает с контейнерами с самых пер­
вых дней появления технологии Docker. Он опубликовал книгу Using
Docker (amzn.to/2sVAIZt) в издательстве О’Рейли. В настоящее
время он является главным научным сотрудником общеевропейской
компании Container Solutions, специализирующейся на консалтинге
и разработке продуктов для микрослужб и контейнеров.
С общими комментариями и сообщениями об ошибках, пожалуйста, обращайтесь по адресу
[email protected]. Мы сожалеем, что не можем ответить на технические вопросы
Об авторах
Эви Немет уволилась с факультета вычислительной техники Уни­вер­
ситета штата Колорадо в 2001 г. Многие годы она исследовала просторы
Тихого океана на своей 40-футовой яхте “Wonderland” (“Страна чудес”)
до ее трагического исчезновения в 2013 г. Четвертое издание этой кни­
ги — это последнее издание, в котором она принимала активное уча­
стие, но мы изо всех сил старались сохранить ее текст там, где это было
возможно.
Гарт Снайдер (@GartSnyder) работал в компаниях NeXT и Sun и по­
лучил степень бакалавра электротехники в колледже Суортмор, штат
Пенсильвания, а также степени магистра медицины и делового админи­
стрирования в Университете Рочестера.
Трент Р. Хейн(@trenthein) — большой энтузиаст кибербезопасности и
автоматизации. Помимо технологий, он любит езду на велосипеде, гор­
ные лыжи, ловлю рыбу нахлыстом, туристические походы, песни в сти­
ле кантри, собак и оксфордскую запятую1. Трент получил степень бака­
лавра вычислительной техники в Университете штата Колорадо.
Бэн Уэйли — основатель компании WhaleTech, занимающейся независи­
мым консалтингом. Он отмечен призом компании Amazon как один из
выдающихся энтузиастов Amazon Web Services (AWS Community Heroes).
Он получил степень бакалавра компьютерных наук в университете шта­
та Колорадо в Боулдере.
Дэн Макин (@dan_mackin) получил ученую степень бакалавра элек­
трической и компьютерной инженерии в университете штата Колорадо
в Боулдере. Он применяет систему Linux и другие технологии с откры­
тым исходным кодом не только для выполнения своих профессиональ­
ных обязанностей, но и в качестве хобби — для автоматизации сбора
метеорологических данных. Дэн любит горные лыжи, парусный спорт,
внутренний туризм, а также проводить время со своей женой и собакой.
1
Запятая, которая ставится перед союзом and в конце перечисления. — Примеч. ред.
Памяти Эви
В каждой области знаний есть авторитет, который ее определяет и олицетворяет.
В системном администрировании таким человеком является Эви Немет.
Это пятое издание книги, в которой Эви является главным автором. Хотя Эви не
смогла физически присоединиться к нам, ее образ всегда был рядом, кроме того, ей
принадлежат многие главы и примеры. Мы прилагали огромные усилия для сохранения
необычного стиля Эви, для которого характерна объективность, техническая глубина
и внимание к деталям.
Профессиональный математик и криптограф, Эви еще недавно работала профессором информатики в Университете Колорадо в Боулдере. То, как возникло системное администрирование, и какое участие Эви в нем приняла, подробно описано в последней
главе этой книги “Краткая история системного администрирования”.
На протяжении всей своей карьеры Эви с нетерпением ждала выхода на пенсию,
чтобы отправиться в кругосветное плавание. В 2001 г. она наконец осуществила свою
мечту — купила парусник Wonderland и отправилась в путешествие. Многие годы Эви
приводила нас в восторг рассказами об удивительных островах, замечательных людях
и парусных приключениях. Работая над двумя изданиями этой книги, Эви бросала
якорь как можно ближе к берегу, чтобы загружать свои наброски через сети Wi-Fi.
Никогда не отказываясь от рискованных приключений, в июне 2013 г. Эви стала
членом экипажа знаменитого парусника Nina и отправилась в плавание по Тасманскому
морю. Вскоре после этого шхуна Nina исчезла в сильном шторме, и с тех пор мы ничего
не слышали от Эви. Она жила своей мечтой.
Эви научила нас гораздо большему, чем системное администрирование. Даже когда ей исполнилось 70 лет, она оставалась лучшей: лучше всех организовывала сети, настраивала серверы, отлаживала ядра, колола дрова, жарила цыплят, пекла пироги и пила
вино. Вместе с Эви все было достижимым.
Здесь невозможно кратко сформулировать всю мудрость Эви, но некоторые принципы глубоко внедрились в наши головы.
• Будьте консервативными по отношению к тому, что вы отправляете, и либеральными — к тому, что вы получаете.1
• Будьте либеральными к тому, кого вы нанимаете, но своевременно их увольняйте.
• Избегайте двусмысленности.
• Бакалавры — секретное сверхмощное оружие.
• Красных чернил не бывает слишком много.
• Вы не поймете, что вы делаете, пока не сделаете.
• Время для суши есть всегда.
• Не бойтесь попробовать что-то дважды.
• Всегда используйте программу sudo.
Мы уверены, что некоторые читатели спросят нас, что на самом деле означают некоторые из приведенных выше афоризмов. Мы, по примеру Эви, оставим это в качестве упражнения. Вы можете даже услышать, как она говорит: “Попробуйте сами.
Посмотрите, как это работает”.
Счастливого плавания, Эви. Мы скучаем по тебе.
Этот принцип также известен как Закон Постела, названный в честь Джонатана Постела (Jon
Postel), который был редактором серии документов RFC с 1969 г. до своей смерти в 1998 г.
1
Предисловие
Современные технологи — мастера в поиске ответов в Google. Если другой системный администратор уже столкнулся с проблемой (и, возможно, решил ее), вы найдете
описание решения в Интернете. Мы приветствуем и поощряем этот открытый обмен
идеями и решениями.
Если в Интернете есть так много информации, зачем нужно новое издание данной
книги? Мы считаем, что эта книга способствует профессиональному росту системного
администратора.
• Мы предлагаем принципы, руководство и контекст для надлежащего применения
технологии. Важно рассмотреть любое пространство проблем с разных точек зрения. Необходимо владеть основами смежных дисциплин, таких как безопасность,
согласованность, методология DevOps, облачные вычисления и жизненные циклы
разработки программного обеспечения.
• Мы принимаем практический подход. Наша цель — обобщить коллективную точку зрения на системное администрирование и рекомендовать подходы, которые
выдержали испытание временем. Эта книга содержит описания многочисленных
случаев из практики и множество прагматических советов.
• Это книга не о том, как запустить операционную систему UNIX или Linux у себя
дома, в гараже или на смартфоне. Вместо этого мы описываем управление производственными средами, такими как предприятия, правительственные учреждения
и университеты. В этих средах есть требования, которые выходят далеко за пределы возможностей типичного любителя.
• Мы учим вас, как быть профессионалом. Эффективное системное администрирование требует как технических, так и программистских навыков. А также чувства
юмора.
Организация книги
Книга разделена на четыре большие части: основы администрирования, сеть, хранение и эксплуатация.
Раздел “Основы администрирования” содержит широкий обзор операционных систем UNIX и Linux, с точки зрения системного администратора. Главы в этом разделе
охватывают большинство фактов и методов, необходимых для запуска автономной сис­
темы.
Раздел “Сеть” описывает протоколы, используемые в системах UNIX, и методы,
применяемые для настройки, расширения и поддержки сетей и серверов, работающих
в Интернете. Здесь также рассматривается сетевое программное обеспечение высокого
уровня. Среди предлагаемых тем — система доменных имен, электронная почта, единый
вход и веб-хостинг.
В разделе “Хранение” рассматриваются проблемы хранения и управления данными.
В этом разделе также рассматриваются подсистемы, которые допускают совместное использование файлов в сети, такие как сетевая файловая система и протокол SMB, совместимый с Windows.
Раздел “Эксплуатация” посвящен ключевым темам, с которыми сталкивается системный администратор на ежедневной основе при управлении производственными
Предисловие
37
средами. Эти темы включают в себя мониторинг, безопасность, производительность,
взаимодействие с разработчиками и политику управления группой системного администрирования.
Авторы
Мы рады приветствовать Джеймса Гарнетта, Фабрицио Бранку и Адриана Муата
в качестве соавторов этого издания. Глубокие знания этих ученых в разных областях
значительно обогатили содержание книги.
Контактная информация
Пожалуйста, отправляйте предложения, комментарии и сообщения об ошибках
на адрес [email protected]. Мы отвечаем на письма, но, пожалуйста, будьте терпеливы; иногда может пройти несколько дней до того, как один из нас сможет ответить.
Из-за объема электронной почты, которая приходит на этот адрес, мы сожалеем, что не
можем ответить на технические вопросы.
Чтобы просмотреть текущий список ошибок и другую актуальную информацию, посетите наш веб-сайт admin.com.
Надеемся, вам понравится эта книга, и желаем удачи в увлекательном системном администрировании!
Гарт Снайдер
Трент Р. Хейн
Бен Уэйли
Дэн Макин
Июль 2017 г.
Введение
В 1942 г. Уинстон Черчилль описал одну из первых битв Второй мировой войны: “Это
еще не конец, это даже не начало конца, но это, возможно, конец начала”. Я вспомнил
эти слова, когда мне было предложено написать предисловие к пятому изданию “UNIX
и Linux: руководство системного администратора”. Исчезновение в море Эви Немет
было большой печалью для сообщества UNIX, но я рад видеть ее наследие в виде этой
книги и ее многочисленных достижений в области системного администрирования.
В основе Интернета изначально лежала система UNIX. В отличие от сложных коммерческих операционных систем своего времени система UNIX была минималистичной, ориентированной на инструменты, переносимой и широко используемой людьми,
которые хотели делиться своей работой с другими. То, что мы сегодня называем программным обеспечением с открытым исходным кодом, в первые годы работы UNIX
и Интернета было уже широко распространенным, но не имело названия. Технические и
академические сообщества открыто публиковали свои результаты, потому что выгоды,
очевидно, перевешивали издержки.
Подробные истории UNIX, Linux и Интернета были подробно описаны в других
книгах. Я касаюсь этих очень тонких тем только для того, чтобы напомнить всем нам,
что современный мир во многом обязан открытому исходному программному обеспечению и Интернету, а его первоисточником является UNIX.
Поскольку ранние UNIX- и интернет-компании стремились нанимать самых ярких
людей и реализовывать самые инновационные функциональные возможности, переносимость программного обеспечения часто приносилась в жертву. В конце концов,
системные администраторы вынуждены были учить немногое о многом, потому что
никакие две операционные системы в стиле UNIX (тогда и сейчас) не были абсолютно одинаковыми. Являясь действующим системным администратором UNIX в середине 1980-х и позже, я должен был знать не только сценарии оболочки и конфигурацию
Sendmail, но и драйверы устройств ядра. Также важно было знать, как исправить файловую систему с помощью восьмеричного отладчика. Веселые были времена!
Именно в это время появилось первое и все последующие издания данной книги.
В разное время мы называли авторов “Эви и экипаж” или “Эви и ее дети”. Поскольку
я работал над программой Cron и сервером BIND, каждый раз, когда выходило очередное издание этой книги, Эви проводила одну-две недели со мной (с моей семьей и у
меня на работе), чтобы убедиться, что книга содержит все, что нужно, в ней нет ошибок, а о каждой из программ сказано что-то уникальное и полезное. Честно говоря, общение с Эви было изнурительным, особенно когда ее что-то очень интересовало или
приближался контрольный срок, или, как в моем случае, происходило и то, и другое.
Тем не менее, как уже было сказано, я ужасно скучаю по Эви и ценю каждое воспоминание и каждую ее фотографию.
За десятилетия многое изменилось. Удивительно наблюдать, как эта книга развивается вместе с самой системой UNIX. Из каждого нового издания постепенно исчезают
устаревшие и неактуальные технологии, чтобы освободить место темам, которые стали
важными для администраторов UNIX, по крайней мере по мнению авторов.
Трудно поверить, что мы потратили десятки киловатт энергии на компьютеры размером с грузовик, чьи возможности теперь затмеваются смартфоном Android. В равной
степени трудно поверить, что мы использовали сотни или тысячи серверных и настольных компьютеров с уже устаревшими технологиями, такими как rdist. В те годы из-
39
Введение
дания этой книги помогали таким людям, как я (и Эви), справляться с разнообразными,
а иногда и особенными компьютерами, которые были реальными, а не виртуальными,
и каждый из которых нужно было поддерживать, а не инсталлировать заново (или, как
на платформе Docker, собирать заново) каждый раз, когда что-то требовало исправления
или обновления.
Мы адаптируемся или сходим со сцены. “Дети Эви”, которые продолжают наследие
Эви, адаптировались и вернулись в этом пятом издании, чтобы рассказать вам, что необходимо знать о том, как работают современные компьютеры под управлением систем
UNIX и Linux и как заставить их работать так, как вы хотите. Потеря Эви знаменует
собой конец эры, но также поднимает вопрос о том, сколько аспектов системного администрирования ушло в историю вместе с ней. Я знаю десятки умных и успешных
технологов, которые никогда не будут заделывать кабели в задней части стойки оборудования, не услышат тон модема и не увидят кабель RS-232. Это издание предназначено для тех, чьи системы живут в облаке или в виртуализированных центрах обработки
данных; тех, чья административная работа в значительной степени принимает форму
исходного кода автоматизации и конфигурации; тех, кто тесно сотрудничает с разработчиками, сетевыми инженерами, сотрудниками службы контроля и всеми другими рабочими пчелами, которые населяют современный улей.
Вы держите в руках новейшее, лучшее издание книги, чье рождение и эволюция точно отслеживали рождение и эволюцию UNIX и интернет-сообщества. Эви очень гордилась бы своими детьми, как из-за этой книги, так и из-за того, кем они оказались.
Я ими горжусь.
Пол Викси (Paul Vixie)
Ла Хонда, Калифорния
Июнь 2017 г.
Благодарности
Многие люди внесли свой вклад в этот проект — от технических обзоров и конструктивных предложений до общей моральной поддержки. Следующие лица заслуживают
особой благодарности.
Джейсон Каролан
(Jason Carolan)
Нед Макклейн
(Ned McClain)
Дэйв Рот
(Dave Roth)
Рэнди Элсе
(Randy Else)
Бет Мак-Элрой
(Beth McElroy)
Питер Санкаускас
(Peter Sankauskas)
Стив Геде
(Steve Gaede)
Пол Нельсон
(Paul Nelson)
Дипак Сингх
(Deepak Singh)
Асиф Хан
(Asif Khan)
Тим О’Рейли
(Tim O’Reilly)
Пол Викси
(Paul Vixie)
Сэм Лезерс
(Sam Leathers)
Мадхури Пери
(Madhuri Peri)
Наш редактор в издательстве Pearson, Марк Тауб (Mark Taub), заслуживает огромной
благодарности за его мудрость, терпеливую поддержку и покровительственное отношение на протяжении работы на книгой. Можно с уверенностью сказать, что это издание
не получилось бы реализовать без него.
40
Введение
Мэри Лу Нор (Mary Lou Nohr) уже более 20 лет является нашим безжалостным редактором рукописей. Когда мы начали работу над этим изданием, Мэри Лу уже ушла
на заслуженную пенсию. После многочисленных и продолжительных просьб она согласилась присоединиться к нам на бис. (И Мэри Лу Нор, и Эви Немет изображены на обложке. Вы можете найти их?)
У нас была фантастическая команда технических рецензентов. Три преданных друга
оценили всю книгу: Джонатан Корбет (Jonathan Corbet), Пэт Парсегян (Pat Parseghian)
и Дженнин Таунсенд (Jennine Townsend). Мы высоко ценим их упорство и тактичность.
Удивительные картинки и обложка этого издания были задуманы и исполнены Лизой
Хейни (Lisa Haney). Ее портфолио находится в режиме онлайн на сайте lisahaney.com.
И последнее, но не менее важное: спасибо Ласло Немет (Laszlo Nemeth) за его готовность поддержать продолжение этой серии.
От издательства
Вы, читатель этой книги, и есть главный ее критик и комментатор. Мы ценим
ваше мнение и хотим знать, что было сделано нами правильно, что можно было сделать лучше и что еще вы хотели бы увидеть изданным нами. Нам интересно услышать
и любые другие замечания, которые вам хотелось бы высказать в наш адрес.
Мы ждем ваших комментариев и надеемся на них. Вы можете прислать нам электронное письмо, либо просто посетить наш веб-сайт и оставить свои замечания там.
Одним словом, любым удобным для вас способом дайте нам знать, нравится или нет
вам эта книга, а также выскажите свое мнение о том, как сделать наши книги более интересными для вас.
Посылая письмо или сообщение, не забудьте указать название книги и ее авторов,
а также ваш обратный адрес. Мы внимательно ознакомимся с вашим мнением и обязательно учтем его при отборе и подготовке к изданию последующих книг.
Наши электронные адреса:
E-mail: [email protected]
WWW: http://www.dialektika.com
ЧА СТЬ 1
О сно вы администриро вания
Глава
1
с чеrо на чать
М ы нап исал и эту к н и гу, чтобы зан ять конкретную н и ш у в обш ирной экосистеме
mаn-страниц, блогов, журналов, книг и других справочн ы х материалов, которые должны
удовлетворять потребности с исте м н ых адми н истраторов UNIX и Linux.
Во-перв ы х , это общее руководство . В н е м расс матриваются осн о в н ы е с исте м ы
управле н и я , выделяются разн ые части каждой из н и х и объясняется , как он и работают
вместе . Во м ногих случаях, когда вы должны выбирать между различн ы м и реализация ­
м и определен ной кон цепции, мы описываем пре и м ущества и недостатки самых попу­
л ярн ы х возможностей .
Во- вторых, это краткий спра вочн и к , в котором собрано то, что необходи мо з нать,
чтобы в ыпол н ять т и п и ч н ы е задач и н а м ножестве распростране н ны х с истем U N IX
и Linux. Например, команда p s , показывающая состоя н и е вы пол н я е м ы х процессов ,
п оддержи вает более 80 параметров командной строки в с истемах Linux. Однако всего
несколько комбинаций этих параметров удовлетворя ют большинство потребностей с и ­
стем ного адми нистратора; м ы приводим их в разделе 4.3.
Наконец, в этой кни ге основное внимание уделяется управлению корпоратив н ы м и
серверами и сетя м и , т.е. серьезному профессиональному с исте мному адми н истрирова­
нию. Легко настроить одну систему; сложнее сохранить распределенную облачную плат­
форму, работающую без сбоев, несмотря на опасность распростране н и я вирусов, наруше­
ние связности сетей и целенаправленные атаки. Мы описываем методы и эмпирические
правила, помогающие восстанавливать системы после сбоев , и предлагаем решения, ко­
торые масштабируются по росту размеров, сложности и неоднородности вашей импери и .
М ы не претендуе м н а пол ную объективность, но считае м , что в ыразили с вои предпо­
чтения достаточно ясно. Одной из и нтересных особен н остей с истемного админ истриро-
Часть 1. Основы администрирования
44
ван и я является то, что разум н ые л юди могут и меть соверш е н но разн ы е представления
о наиболее подходящем ре ш е н и и . М ы предлагаем наши субъе ктивн ые м н е н ия как и н ­
формацию к разм ышле н и ю. Решайте сами , до какой степени в ы с н им и согласн ы и на­
с колько они соответствуют вашей среде .
1 . 1 . ОСНОВНЫЕ ОБЯЗАННОСТИ СИСТЕМНОГО АДМИНИСТРАТОРА
В при веден н ых н иже разделах описан ы основные задачи , которые должны в ыпол ­
нять адми н истраторы . Эти обязан ности н е всегда возлагаются на одного человека, во
м ногих орган изациях работа расп ределяется между нескол ьки м и чле н а м и команды .
Одн ако по крайней мере оди н человек должен разбираться во всех ком понентах и обе­
спечивать правил ьное ре ш е н ие каждой задачи .
Уп равление доступом
Систем н ый администратор создает учетные записи для новых пользователей, удаляет
учетн ые записи н еакти вных пользователей и решает все связанные с учетн ы м и запися ­
ми проблемы, которые могут возникнуть ( например, забытые пароли и потеря н н ые пары
кл ючей). Процесс добавления и удаления учетных записей обычно автоматизируется с по­
мощью систе м ы управления конфигурацией или централизованной службы каталогов.
W Информация о работе с учетными записями пользователей приведена в главах 8, 1 7 и 23.
Добавлен ие оборудова ния
Админ истраторы , работающие с физическим оборудован ием ( в отличие от облач ных
систем и систе м , размеще н н ых н а виртуальном сервере ) , должны устанавл и вать и на­
страи вать е го так , чтобы операцион ная с истема могла е го распознать. Функции под­
держки оборудования могут варьироваться от простой задачи добавления сетевой и нтер­
фейсной карты до настройки специализированного внешнего масси ва хранения.
А втоматизация задач
Использование инструментов для автоматизации повторяющихся и трудоем ких задач
повышает эффективность работы , сн ижает вероятность ошибок и повышает вашу спо­
собность быстро реагировать н а изменяющиеся требования. Адми нистраторы стремят­
ся сократить кол ич ество ручного труда, необходимого для бесперебойной работы с истем.
Знакомство с языками сценариев и и нструментами автоматизации - важная часть работы.
W Информаци ю о сценариях и автоматизаци и см. в главе 7.
Уп равление резервн ыми коп иями
Резервное копирование дан н ы х и их восстановл е н ие п р и необходимости я вл я ются
важн ы м и ад м и нистративными задачам и . Хотя резерв ное копирование - долгое и скуч ­
ное занятие , ч астота бедствий в реальном м ире просто сл ишком вели ка , чтобы можно
было и гнорировать эту работу.
W Советы по резервному копированию см. в разделе 20. 1 3 .
Существуют операцион н ы е систе м ы и отдел ьные пакеты программ ного обеспече­
н и я , которые заре коме ндовали себя как хорошие и нструменты и методы для облегчения
Глава 1 . с чего начать
45
резервного ко п ирован и я . Резервные ко п ии должны вы п ол н я ться по регул я рному рас ­
п исани ю , а и х восстановление должно п ериодически проверяться , чтобы гарантировать
п равил ьную работу.
Уста новка и обновление п рограммного обеспечен ия
Про грам м ное обе с п е ч е н и е необходи м о выбират ь , и нст ал л и ровать и на с траивать ,
п ричем , как п равило , в разн ых о п ерацион ных си стемах . По мере обновления за платок
и обновлений безо п асности их необходимо тестироват ь , ан ал изировать и внедрять в ло­
к ал ьную с реду, не ставя п од у грозу стаб ил ьност ь п роизводстве н н ых систе м .
W Информацию об управлении п рограммным обеспечением см. в главе б .
Термин поставка программного обеспе чения относ ится к п роцес с у в ы п уска обновл е н ­
н ых верс и й , гла в н ы м образом , собстве н ного програм м ного обе с п ечения . Непрерывн ая
поставка п ереносит этот п роцесс на следующий уровен ь , п редус матривая авто м атиче­
с кую регуля рную п оставку п рограм м ного обесп ечения п ол ьзователям п о м ере е го разра­
ботки . Ад м и н истраторы п о м огают внедрять надежн ые п роце с сы п оставки , отвечающие
требован и я м п ред п риятия .
W Информацию о развертыва н и и и непрерывной поставке программ ного обеспечения
см. в главе 2 6 .
Мониторинг
Работа н ад решением п роблемы обычно требует мен ьш е времени , ч е м докуме нтиро­
вание и со здание отчетов , и п ол ь зовател и , работающие в организации , зачас тую сл едуют
по п ути наи м е н ьшего соп ротивлени я . В н е ш н ие п ол ьзовател и чаще открыто п убл и куют
свои ж ал обы , чем п росят о п о м ощи . Адм и н истраторы могут п редотврати т ь жалобы , об­
нар уж и вая и ус траняя п робл е м ы до их откр ытого п роявл е н и я . К задача м м они тори н га
относ ится обес п ечение того , чтобы веб - службы быстро и корре ктно реагиров ал и на со­
бытия , собирал и и ан ал изировал и файл ы журналов и отслежи вал и доступ ность рес урсов
сервера , таких как дисковое п ространство. Все это откр ы вает отл и ч н ы е возможности
для автомат и зации , а множество с истем м он иторинга (как ком мерчес ких , так и с откры­
ты м исходн ы м кодом ) могут п о м о ч ь си стем н ы м адм и нистраторам ре ш ить эти задачи .
W Информацию о мониторинге см . в главе 28 .
Исправление п роблем
Сбои се т евых систем ы п роисходят неожидан но , а иногда п р иводят к тяжел ы м п о­
следстви я м . В об я занности адм инистратора входят фу нкции механика , который диагн о ­
стирует п робл е м ы и п р и необходи м ости прибегает к п омощи экспертов. П оиск и сточ ­
н и ка п робл е м ы часто сложнее , чем ее решение .
W Информацию о сетевых проблемах см. в разделе 1 3 . 1 2 .
Ведение локал ьной документации
Адм и н и страторы выбирают п оста в щ и ков , п и ш у т с ценар и и , развора ч и вают п ро­
грамм ное обес п ечение и п рини м ают м н ожество др у ги х решений , которые могут б ы ть не
с разу очевидн ы м и ил и инту итивно п онятн ы м и други м . П ол ная и точная доку м ентация
я вл я ется благом дл я членов ком анды , которы е в п рот и вном случае в ы н ужд е н ы б ы л и
Часть 1. Основы администрирования
46
бы ноча м и вы пол нять обратное проектирование систе м ы , чтобы ус тран ить пробл е му.
Подробная схема се т и полезнее , че м м ногословн ы й те кст в описа н ии проекта.
m Информацию о локальной документации см. в разделе 3 1 3
.
.
Бдител ьный мон иторинг безопасности
Ад м и н истраторы - п ервая л и н и я защиты сетевых с и стем . Адм и н истратор должен
вы пол н ять правил а безопас ности и вырабаты вать процедуры для предотвращен и я на ­
рушений . В зави си мости от контекста эти функции м огут в кл ючать как нескол ько п ро ­
стых проверок несанкционированного доступа , так и слож ную сеть ловушек и программ
аудита. Систем ные ад м ин истраторы осторожн ы по с вое й природе и часто я вляются спе ­
циал истам и по безопасности в техничес ких организациях.
m И нформацию о системах безопасности см. в главе 27.
Настройка п роизводител ьности
UN IX и Liпux
это оп ерацио н н ы е с исте м ы обще го назнач е н и я , которые хорош о
подходят практически для л юбой м ысли м ой вычисл ител ьн ой задач и . Адм и н истраторы
м огут адаптировать с исте м ы для достижени я о п тимал ьной п роизводительн ости в соот­
ветствии с потребностя м и пользователей , доступ ной ин фраструктурой и услугам и , п ре ­
доставляе м ы м и систе м а м и . Есл и сервер работает плохо , задача адм и н истратора - п ро ­
а н ал изировать е го работу и определить области , которые нуждаются в улуч ш е н и и .
-
W Информацию о вопросах п роизводительности с м . в главе 29 .
Разработка п ра вил
П о нор м ативно- правовым прич и нам в бол ьш и нстве орган изаци й необходимо уста­
новить правила , регул ирую щ и е допус т и м ое и с пол ьзова н и е ком п ьюте р н ы х с и сте м ,
управл е н и е дан н ы м и и и х хранение , кон фиде нциальнос ть и бе зопас нос ть се те й и с и ­
сте м , а также други е вопрос ы , п редставля ющие и нтерес . Систе м н ы е ад м и н истраторы
часто помогают орган изация м вырабаты вать разумные правила, которые отвечают букве
и духу закона и одновременно способствуют успеху и п роизводительнос ти.
m Информацию о разработке локальных п равил см. в разделе 1 . 8 .
Работа с поста вщиками
Для п редос тавле н и я разнообразных вспомогател ьн ы х услуг и продуктов , с вязан ных
с их в ы ч исл ите л ьн о й и н фра с труктурой , бол ьш инство орган изаци й п рибе гае т к п о ­
стор о н н ей п о м ощи . Эту помощь мо гут оказы вать разработч и к и п рограм м н о го обе ­
с пе ч е н и я , поставщи ки облачной и н ф раст руктур ы , продавцы п рогра м м н ых п р одукто в
ка к услуг (service-as-a-service - Saa S ) , сотрудн и к и службы поддержки , кон с ультанты ,
п одр ядчики , эксперты по безопас ности и пос тавщики платформ ил и ин фраструктур .
Адм и н и с траторам м ож н о поруч ить выбирать поста в щ и ков , пом огать в пере говорах
по контрактам и внедрять реш е ния по сл е заверш е н ия работы над документа ми .
Тушение п ож а ров
Хотя помощ ь другим л юдя м с и х разнообразн ым и пробл е мам и редко вкл ючается
в опи с ание фун кционал ьн ы х обязанносте й систе м н ого ад м и н истратора, эти задачи за­
ни мают значительную часть бол ьши нства рабочих дней ад м и н истраторов. На систем н ых
Глава 1 . С чего начать
47
администраторов обруш и вается град жалоб , начиная с " О н еще вчера работал , а сегодня
нет ! Ч то вы изменил и ? " и заканчивая " Я пролил кофе на клав и атур у! Мо жн о л и вылить
на нее воду, чтобы смыть кофе? "
В бол ьшинстве случаев ваш и ответы на эти вопросы гораздо больше вл и я ю т на то ,
наскол ько цен н ы м адми н истраторо м вас будут сч итат ь, чем л юбые техн ические н а вы ки ,
которы м и вы могл и бы обладать . Вы можете л ибо вы ть от нес п раведливости , л ибо радо­
ватьс я тому, ч то за одну хорошо вы п ол н ен ную п рос ьбу о п о м ощи ва м будет н ач исле но
бол ьше баллов , чем за п ять часов ночной работы . Выбор за ва м и !
1 .2 . П РЕДВАРИТЕЛЬНЫЙ опыт
В этой книге м ы предп олагаем , что у вас есть о пределе н н ы й о п ы т рабо т ы с с и с те ­
мам и Linux ил и U N IX. В частности , у вас должно бы ть общее предста влен и е о том , как
система выгл ядит и вос п рин имается с точки зрен ия пользовател я , п оскольку мы н е рас ­
сматри вае м этот м атериал . Повысить уровень вашей квалификации п омогу т н ес кол ько
хоро ш их книг ; с м . раздел " Рекомендуемое чтение " в к он ц е глав ы .
М ы любим хорошо п родуманные графические и нтерфей с ы . К сожал е н и ю , инс тру­
менты графического п ол ьзовательского и нтерфейса для сист ем н ого ад м и н и с трир о в а н ия
в системах U N IX и Linux остаются рудиментар н ы м и по сравнению с богатст вом базово­
го п рограммного обес п ечения . В реал ьном м и ре адм и н истраторам должно бы ть удобно
испол ьзоват ь командную строку.
Для редактирования текста м ы настоятел ьно ре ком е ндуе м и зучить ред а ктор vi ( те ­
п ерь он ч аще все г о рассматри вается в рас ш и ре н но й форм е , vim ) , которы й я вляется
стандарт н ы м для всех систем . О н простой , м ощ н ый и эффе ктив н ы й . Ос воен и е редак­
тора vim - это , пожалуй , луч ш и й способ повыш е н и я п роизводител ьности , досту п н ы й
для адми н истраторов. Исп ользуйте команду vimtutor для отличн ого инт ерактивного
введен ия в эту тему.
Существует альтернатива - редактор nano с графически м п ользовател ьск и м и нтер­
фе йсом , п редставл я ю щ ий собо й п росто й и компакт н ы й " р еда ктор для начинающих"
с экранн ы м и подсказкам и . Не испол ь зуйте е го откр ы то ; п рофессио н альны м админ и­
страторам зачастую очень не н равится , когда их коллеги используют этот редактор .
Хотя адм и н истраторы о б ы ч н о н е сч итаются разработч и ка м и п рограм м ного о бе ­
с п е ч е н и я , отрасл е в ы е те нде н ц и и разм ы вают гра н и ц ы м ежду эт и м и ф у н кц и я м и .
Эффекти в н ы е адми н и страторы , как правило, знают м н ого я з ы ко в п рограм мирования
и н е прочь освоить новый язык, если возн икнет такая необходимость.
W Введение в сценарии см . в главе 7.
Для создан ия новых сценариев мы рекомендуем язы ки Bash (или bash, или sh), Ruby
Python. Bash - это командн ая оболочка , принятая по умолчан и ю для больши нства си­
или
стем U N IX и Linux. Bash п римитивен как язык програм мирования , н о являе тс я хорошим
средством интеграции инструментов системного администратора. Python - это ум н ый язык
с хорошо понятным синтаксисом , широким сообществом разработчико в и библ иотеками ,
которые облегчают решение многих задач . Разработчи ки , использу ющи е язык Ruby, оп исы­
вают его как " п риятный " и " красивы й " . Языки Ruby и Python во мн огом п охожи , и мы об­
наружили , что они обладают одинаковыми фун кционал ьными возможностя м и д11 я уп равле­
н и я системами . Выбор между ними в ос новн ом за висит от личных предп очте ний.
М ы также пред п олагаем , что в ы умеете работать с и н струм е нтом expect, которы й
п редставляет собо й н е я з ы к п ро граммирован ия , а и нт ерфейс для за п уска и нтерактивных
Часть 1. Основы администрирования
48
програ м м . Это эффективная технология интеграции, которая может замен ить н екото­
рые сложные сценар и и и проста в ос вое н и и .
Самые важн ые факты , которые необходимо знать о сценариях дп я работы с языками
Bash, Python и Ruby, обобщаются в главе 7. В н е й также рассматриваются регулярные
в ыраже н и я ( шаблоны соответствия текста) и некоторые идиом ы оболоч ки , полезные
дпя систе м н ых админ истраторов.
1 .3 . ДистРИ&Утивы L1нux
В дистрибутив Linux входит ядро операционной с истемы и пакеты, содержащие все
команды, которые можно вы пол нять в с истеме. Все дистрибутивы имеют одну и ту же
линейку ядер, но формат, тип и количество пакетов немного отличаются. Дистрибутивы
также различаются по направленности, уровню поддержки и популярности. По-прежнему
существуют сотни независи м ых дистрибутивов Linux, но м ы считае м , что в ближайшие
годы в производствен н ых средах будут преобладать дистрибутивы Deblan и Red Hat .
П о бол ьшому счету, различия м ежду дистрибутивам и Linux н е я вля ются очен ь уж
больш и м и . Довольно странно, что существует так м ного разн ых дистрибутивов, каждый
из которых утверждает, что он отличается "легкой инсталляцией" и " крупной библ и ­
отекой п рограммного обеспечения " . Трудно избежать вывода о том , что л юдям просто
нравится создавать новые дистрибутивы Linux.
Большинство основных дистрибутивов имеют относительно безболезненную процедуру
инсталл я ции, среду рабочего стола и некоторую форму управления пакетами. Вы можете
легко их испытать, запустив экземпляр на облаке или на локальной виртуальной машине.
П о бол ьшей части незащищенность операционных систем общего назначения я вля ­
ется следствие м и х сложности. Практически все ведущие дистрибутивы забиты м ноже­
ством неиспользуем ых пакетов програм много обеспечения; в резул ьтате часто возн ика­
ют уязвимости в области безопасности и сложности в управл е н и и . В ответ поя вилось
относительно новое поколен ие м и н ималистских дистрибутивов. Л идером среди н их яв­
ляется с истема CoreOS, которая предпочитает запус кать все программное обеспечение
в контейнерах . Alpine Linux - это легкий дистрибутив, которы й используется в качестве
основы дЛ Я м ногих публ ич н ых образов Docker. Учитывая эту редукционистскую тенде н­
цию, мы ожидаем , что в бл ижайшие годы доля дистрибути вов Linux будет сокращаться .
Выбрав дистрибутив, вы делаете и нвестиции в какой-то кон кретный способ работы .
Вместо того чтобы учитывать только функции инсталлированного программ ного обе­
с печен и я , разумно посмотреть, как ваша организация и кон кретн ы й поставщик будут
работать друг с другом. Переч исл им некоторые важные вопросы.
•
Будет л и существовать этот дистрибутив через пять лет?
•
Будет ли дистрибутив распространяться поверх последних исправлений уязвимости?
•
И меет ли этот дистрибутив активное сообщество и достаточную документацию?
•
Есл и у меня возникнут п роблемы , будет ли продаве ц говорить со м ной и сколько
это будет стоить?
Н екоторые из самы х популярных распространенных дистрибутивов перечисл е н ы
в табл. l . l .
Наибол ее жизнеспособные дистрибутивы не обязательно являются корпоративн ы ­
м и . Например, м ы ожидаем , что дистрибутив Deblan Linux (ладно-ладно, Deblan G N U/
Linux!) останется жизнеспособным в течение дп ительного времени, несмотря на то, что
Deblan не я вляется ком панией, ничего не продает и не предпагает поддержки на уров-
Глава 1 . с чего начать
49
н е предп риятия . П роект Deblan извле кает вы году из существован ия п реданной гру п п ы
уч астн и ков и огром ной популярности дистрибути ва Ubuntu, основа н но го на нем .
Таблица 1 . 1 . Самые распространенные общедоступ ные дистрибутивы Unux
Дистрибутив
В еб-сайт
Комментарии
Arch
CeпtOS
CoreOS
DеЬiап
Fedora
Kali
Liпux Miпt
a r chl i nux . o r g
Для тех, кто не боится командной строки
Бесплатный аналог R e d Hat Eпterprise
Все в контейнерах
Бесплатный, как и большинство дистрибутивов GNUish
Испытательный стенд для R e d H a t Liпux
Для специалистов по поиску уязвимых мест
Ubuпtu для настольных компьютеров
Бесплатный аналог SUSE Liпux Eпterprise
Liпux для марш рутизаторов и встроенных устройств
Версия RH EL, поддерживаемая Oracle
20МиБ, все в контейнерах
Надежный, медленно меняющийся, коммерческий
Древний, долгоживущий дистрибутив
Очень популярный в Европе, мно г оязычный
Улучшенная версия Deblaп
centos . org
c o r e o s . с от
debian . org
fedoraproj ect . org
kali . org
l i nuxтi n t . сот
ope n s u s e . o r g
openSUSE
openWRT
openwrt . o r g
Oracle Liпux
RaпcherOS
Red Hat Eпterprise
Slackware
SUSE Liпux Enterprise
Ubuпtu
o r a c l e . с от
r a n che r . с от
r e d h a t . с от
s l a c kw a r e . сот
s u s e . с от
ubuntu . с от
Пол н ый с п исок дистрибути вов , вкл ючая м ножество неан глоязыч н ых , можно най ти
н а сайтах l w n . ne t / D i s t r i but i o n s или d i s t rowa t c h . c om.
W Дополнительную информацию о платформе Docker и контейнерах см. в главе 25 .
1 .4. П РИМЕРЫ СИСТЕМ, ИСПОЛЬЗУЕМЫХ В ЭТОЙ КНИГЕ
В кач естве основных примеров дл я этой кн и г и м ы выбр ал и три п о п ул я р н ы х дис ­
т рибут и ва Linux и оди н вариа нт U N IX: Deblan G N U / Linux, Ubuntu Linux , Red H at
Enterprise Linux (и его клон CentOS) и Fre e B S D . Эти систе м ы я вляются ре презе н тати в ­
н ы м и дл я об щ е го рын ка с учетом знач и тел ь н ой ч асти и н стал л я ц ий , испол ь зуе м ы х се ­
годн я на круп н ых объектах.
И нформация в этой кн и ге обы ч н о относ ится ко всем рассматри ваем ы м с истемам ,
если не указано иное. Де тал и , характер н ые для отдел ь ной систе м ы , отм ече н ы логотипом .
Deblan G N U/Linux 9 . 0 " St retch "
Ubuntu00 1 7 . 04 " Zesty Zapus"
RHEL
Red H at® Enterprise Linux00 7 . 1 и CentOS00 7 . 1
Fre e B S D® 1 1 .0
Бол ь ш и н ство этих торговых марок п р и надл ежат п роизводи телям , в ы пускающи м со­
от ветствующее п рограммное обес п ече н и е , и испол ьзуются с л юбезного разр е ш е н и я и х
владел ьцев . Те м н е менее поставщики н е рецензиров ал и и н е ут верждал и содержание
ЭТОЙ К Н И Г И .
Часть 1. Основы администрирования
50
Мы н еодн ократно п ытал ись, н о не с могл и получить разреше ние от Red H at на ис­
пол ьзован ие их логотипа с красной шля пой , поэтому был и вынужден ы испол ьзовать
а кро н и м RH EL.
Более подробная информация о каждой из илл юстративных систем приводится в н и ­
жеследующих разделах.
При меры дистрибутивов Li nux
И нформаци я , характерная для Linux, а н е для какого-либо кон кретного
дистрибутива, отмечена логотипом с пингвином Туке , показа н н ы м сле ва.
Deblan ( п роизносится как "деб-я н " в ч есть покойн о го ос нователя Я н а
Мердока ( lan Merdock) и его жен ы Дебры (Debra)) я вляется одн им и з сам ых
старых и наиболее популярных дистрибутивов. Это некоммерческий прое кт
с более чем тысячами участн и ков по всему м иру. П роект Deblan поддержи­
вает идеологическую приверже н н ость развити ю сообщества и открытому
доступу, поэтому для него никогда не возникает вопросов о том , какие части
дистрибутива я вляются свободны м и или распространяе м ы м и .
Существуют три выпус ка дистрибутива Deblan, которые поддержи ваются одновре ­
м е н но: стабил ьн ы й , н ацел е н н ы й на промы шл е н н ы е серверы ; нестабил ь н ы й , содержа­
щий пакеты , которые могут и меть ошибки и уязвимости с точ ки зрения безопасност и ;
и тестовый, которы й находится где-то посреди не.
Дистрибутив Ubuntu основан на проекте Deblan и поддержи вает его привер­
жен ность бесплатному програм мному обеспече н и ю с открытым исход н ы м
кодо м . З а с истемой Ubuntu стоит бизнес - ком пания Canonical Ltd. , ос но­
ван ная предпринимателем М арком Ш аттлвортом ( Mark Shuttleworth).
Ком пания Canonical предлагает множество выпус ков Ubunt u , предназна­
ч енн ых для облаков, настольных ком пьютеров и серверов без программного
обеспече н и я . Существуют даже выпус к и , предназначен н ые дл я телефонов
и планшетов. Номера верс и й Ubuntu означают год и меся ц, например вер­
сия 1 6. 1 О появилась в октябре 2016 года. Каждая версия также имеет аллите­
рацион ное кодовое и м я , такое как Vivid Vervet или Wily �rewolf.
Ежегодно выпус каются две верс и и Ubuntu: в апреле и октябре . Апрел ьс кие выпуски
в четн ые годы представляют собой долгосрочн ые верси и поддержки (long-term support LTS ) , которые обещают пять лет обновлений технического обслуживан ия. Это выпуски ,
рекомендова н н ые для испол ьзования в производстве.
RHEL
Система Red H at была дом и н ирующей силой в м ире Linux более двух десяти­
лети й , и ее дистрибутивы ш ироко испол ьзуются в Северной Америке и за ее
пределам и . По количеству и нсталляций Red H at , l nc . я вляется самой усп е ш ­
н о й в м ире компанией с открытым исходн ым кодом .
С истема R e d H at Enterp rise Linux , часто сокращаемая д о R H E L, ориентирова н а
на производствен н ые среды крупных предприяти й , которые требуют поддержки и кон ­
салтинговых услуг дл я бесперебойной работы своих систем . Как н и парадоксально, с и ­
стема R H E L является открытым исходн ы м кодом , но требует лицензии. Если вы не хо ­
тите платить за лицензи ю , вы не и меете права инсталлировать Red H at .
Ком пания Red Hat также с понсирует с истему Fedora, коллекти вно разработа н н ы й
дистрибутив , служащий и нкубатором для ультрасоврем е нного программного обеспече­
ния, которое н е считается достаточно стабильн ым для R H EL. Fedora испол ьзуется в ка-
Глава 1 . С чего начать
51
честве исходного тестового стенда для программного обеспечен ия и конфигураци й , ко­
торые позже находят свой путь к R H EL.
Дистрибутив CeпtOS практически идентичен Red H at Enterprise Linux, но он
бесплатный. CentOS Project ( c e n t o s . o rg ) принадлежит Red H at и выпол няет­
ся ее ведущи м и разработчи кам и . Однако они работают отдельно от команды
Red H at Enterprise Linux. На дистрибутив CentOS не распространяется торго­
вая марка Red H at и в н е м нет нескол ьких патентованных инструментов, но
в других отношен иях они эквивалентн ы .
Cent O S
отл и ч н ы й выбор для организаций , которые хотят развернуть производ­
стве н н ы й дистрибутив, не выплачивая десяти ну Red H at . Возможен и гибридны й под­
ход: основные серверы могут зап ус кать Red H at Enterprise Linux и пользоваться пре­
восходной поддержкой Red H at , в то время как дл я непроизводстве н н ы х систем может
испол ьзоваться с истема CentOS. Это решение уч итывает все важн ы е аспекты с точ ки
зрения риска и поддержки, а также минимизирует стоимость и сложность управления.
Систем а Cent O S стрем ится к пол ной двоич ной совместимости и совместимости
по спе цификац и я м и отклонениям с системой Red H at Enterprise Linux. В место того
чтобы постоян но повторять " Red Hat и CentOS " , в этой книге мы обычно упоминаем
только одн у из них. Текст зачастую в равной степени относится и к Red H at , и к CentOS,
есл и не указано обратное .
Другие популярные дистрибутивы также я вляются потом кам и Red Hat . Ком пания
O racle продает переименован ную и видоизменен ную верс и ю Cent O S клиентам с воего
програм м ного обеспечения для обслуживан ия корпоративных баз дан н ых. Дистрибутив
Amazon Linux, доступный для пользователей служб Amazon Web Servises, первоначально
был создан на основе систе м ы CentOS и по- прежнему разделяет м ногие ее соглашения.
Бол ьш инство адм и н истраторов в какой-то момент своей карьеры обязательно стол­
кнутся с с истемой, подобной Red Hat , и знакомство с ее н юансам и полезно , даже если
эта система не установлена в вашей организации.
-
Пример дистрибут ива U N IX
Популярность U N IX в течение н екоторого времен и постепенно ослабевает, и бол ь­
ши нство устаревших дистрибутиво в U N IX (например, Solaris, H P- UX и AIX) больше не
испол ьзуются . Открытый исходн ы й код систе м ы B S D я вляется искл ючением из этой
тенденции и продолжает оставаться п редметом культового поклонения, особенно среди
экспертов по операцион н ы м системам, приверже н це в открытого програм м ного обеспе­
ч е н ия и систе м н ых адми нистраторов, нацел е н н ых на безопасность. Другим и слова м и ,
некоторые из ведущих операционных систем в м ире полагаются на различные дистрибу­
тивы B S D . Например, с истема MacOS компан ии Apple использует наследие B S D .
Дистрибутив Free B S D , впервые вы пуще н н ы й в кон це 1 99 3 г. , я вляется наи­
более широко испол ьзуе м ы м производн ы м инструментом BSD. В соответ­
стви и со статисти кой ис пол ьзования он зан имает 70% дол и р ы н ка верси й
B S D . Среди е го пол ьзователе й встречаются крупн ы е интернет- ком пан и и ,
такие как WhatsApp, Google и Netflix. В отличие от Linux, Free B S D - это
полная операцион ная с истема, а не только ядро. Как программное обеспе­
чение ядра, так и пользовател ьское программное обеспечение лице нзируют­
ся в соответствии с разреш ител ьной л ицензией B S D , что с пособствует раз­
витию и расш ире н и ю бизнес-сообщества.
Часть 1. основы администрирования
52
1 .5. ОБОЗНАЧЕНИЯ И ТИПОГРАФСКИЕ СОГЛАШЕНИЯ
И мена файлов, команды и аргументы команд, которые следует набирать на клавиа­
туре без измен е н и й , дан ы полужирным шрифтом. Аргументы , вместо которых следует
подставлять кон кретн ые значения, дан ы курсивом. Например, в команде
ер фа йл к а та лог
предполагается, что аргумент ф а йл следует заме н ить именем реального файла, а аргу­
мент ка талог
именем реал ьного каталога.
Фрагме нты сценариев и файлов конфигурации дан ы монош и р и н н ы м ш рифто м .
Ком ме нтари и к и нтерактивным сеансам и ногда сопровождаются символом коммента­
рия языка bash и выделяются курсивом , напри мер:
-
$ grep ВоЬ /puЬ/phone l i s t
# На й ти номер теле фона Бо ба
555-2834
ВоЬ Smi t h 5 5 5 - 2 3 1 1
ВоЬ Knowl e s
С и м вол $ обозначает приглашение оболочки ввести дан н ы е , адресован ное обы ч ­
ному, непри вилегированному пол ьзователю. П р и глаш е н и е дл я привилегирова н ного
пользователя начинается символом # . Если команда я вляется специфичной для дистри­
бутива ил и семейства дистрибутивов, символ приглашения сопровождается название м
дистрибутива. Например:
$ sudo su - root # Ста ть привилегиро в а нным поль зова телем
# passwd
# Изменить пар оль суперполь з о в а теля roo t
d e Ь i a n # dpkg - l
# Выв е с ти инсталлир ов а нные
# па к е ты в
Deb i a n и Ub un t u
Это соглашение принято в стандартных оболоч ках U N IX и Linux.
За исключением специал ьных случае в мы старал ись избегать испол ьзова н ия особых
шрифтов и форматов, чтобы не отвлекать читателей. Например, м ы часто говорим о таких
сущностях, как группа daemon , никак не выделяя их с помощью отдел ьного формата.
П р и описани и синтаксиса команд м ы , как правило, испол ьзуем те же обознач е н и я ,
что и в интерактивном руководстве:
• текст, заключ е н н ы й в квадратн ые с кобки ( " [ " и
] " ) , я вляется необязательн ы м ;
"
•
•
текст, после которого стоит м ноготочие (" . . . " ) , можно повторять;
фигурные скобки ( { " и " ) ") указывают на то, что необходи мо выбрать оди н из
элементов, разделен н ых вертикальной чертой ( 1 ) .
"
"
"
Например, спецификации
bork [ -х ]
( on l off } имя_ фа йла
соответствует л юбая из следующих команд:
bork on / e tc /pas swd
bork -х off /etc /pas swd /etc/ smartd . conf
bork off /us r / l iЬ / tmac
В выражен иях с шаблонами поиска используются следующие метаси м вол ы :
•
•
звездочка ( * ) обозначает нуль или более символов;
знак вопроса ( ? ) обозначает оди н символ ;
•
тильда ( - ) обозначает н ачальный каталог текущего пользователя ;
•
выражение -пользов а тель обозначает начальны й каталог указан ного пользователя .
Глава 1 . с чего начать
53
Например, и ногда м ы обозначаем каталоги , где хранятся сценар ии зап ус ка (eto/
rc* . d, eto/rc* . d и т.д . ) , сокращен н ы м шаблоном etc/rc* . d.
1 .6. Единицы ИЗМЕРЕНИЯ
М етрические приставки кило- , м е га- и гига- определя ются показателя м и сте п е н и
ч исла 1 0 (например, оди н мегагерц составляет м илл ион герц). Однако дл я ком пьютер­
н ых типов дан н ых испол ьзуются степени числа 2 . Например, один " мегабайт" памяти
составляет 220 , ил и 1 048 576 байт. Ассоциация твердотел ьных техн ологий ( Solid State
Technology Association) Объедин е н ного инженерного совета по эле ктро н н ы м устрой ­
ствам (Joint Electronic Device Engineering Council - J ED EC) даже превратила эти еди н и ­
ц ы измерения в официальны й стандарт Standard 1 00 8 . 0 1 , которы й признает их степеня­
м и двойки (не без н екоторых натяжек).
П ытаясь внести ясность, М еждународная электротехническая ком иссия ( lnternational
Elect rotechnical Commission - 1 ЕС) определила ряд ч исловых приставок , основа н н ы х
именно н а степенях ч исла 2 : киби- (kibl - ) , меби- ( mebl - ) , гиби- (gibl ) и так далее с аб­
бревиатурам и Ки Б ( Ki ) , М и Б ( Mi ) и Ги Б (Gi) соответствен но. Эти еди н и ц ы измерения
искл ючают двус мыслен ность, но их еще тол ько начинают испол ьзовать. П оэтому при ­
выч н ы й набор кило-, м е га- и гига-префиксов все еще в ходу в обоих см ыслах: десятич ­
ном И ДВОИЧНОМ .
О предел ить кон кретное значение можно по конте ксту. Объе м оперативной пам я ­
ти всегда измеряется в степенях двойки, а пропус кная способность сети - в степенях
ч исла 1 0. Размер дисков их производител и об ычно указы вают в десятичных един и цах,
а размер секторов и страниц - в двоичн ых.
В этой книге мы используем еди н ицы измере н и я МЭК ( I EC) дл я степеней двойки
и м етрические - дл я сте п е н е й числа 1 0 . М етри ческие еди н и ц ы измере н ия м ы при­
меняем также для приблизительных значен и й и в тех случаях, когда точ ное основание
сте пе ни неясно, н е зафи ксировано в документах ил и его невозможно определить. В ко­
мандах файлов конфигурации o u t p u t и i n мы оставляем исходн ые значен ия и указа­
тел и еди н и ц измере н и й . Для обозначения бита служит буква Ь, а для байта - буква В.
Н е которые примеры и нтерпретации еди н и ц измерения приведе н ы в табл . 1 . 2 .
-
Таблица 1 . 2 . П римеры интерпретации единиц измерения
П ример
Описание возмо•иого варианта
1 Кбайт ( kB )
Размер файла, равный 1 ООО байт
4 КиБ ( КiВ)
Общий размер страниц твердотельного диска (SSD) 4 0 96 байт
8 Кбайт (КВ)
Размер памяти - не и спользуется в этой книге (см. описание ниже)
1 00 Мбайт (МВ)
Номинально составляет 1 08 байт (неоднозначность, понимается по контексту)
1 ГиБ (GiB)
1 073 7 41 824 байт памяти
1 00 М байт (МВ)
1 Гбит/с (Gb/s)
б Тбайт (ТВ)
Номинально составляет 1 08 байт, в зависимости от контекста, возможно, 99 999 744 байl"
Скорость передачи информации в сети , равная 1 000 000 000 би т в секунду
Объем жесткого диска, равный 6 ООО ООО ООО ООО байт
• Число 1 08 округлено в меньшую сторону до ближайшего целого, кратного размеру 5 1 2-байтового сектора диска.
Буква К в аббревиатуре , как в случае "8 Кбайт ( КВ ) " , не я вляется частью стандар­
та. Это ком пьютерная адаптация метрической аббревиатуры k (обозначение приставки
Часть 1. Основы администрирования
54
кило-), которая означает 1 024 в отличие от 1 ООО. П ос кольку в аббревиатурах для м ногих
м етрических приставок уже испол ьзуется прописная буква , стала возникать пута н и ца
при новом и исходном использовании буквы К в качестве множителя 1 ООО.
В большинстве стран эта проблема не считается важной, например в США метриче­
ские префиксы часто испол ьзуются неоднознач но. В дистрибутиве Ubuntu была п ред­
при нята попытка реал и зовать последовательную политику испол ьзован ия един и ц из­
мере н и й , но ш ирокой поддержк и , даже в самой компа н и и Canonical , она, похоже , н е
получ ила (подробнее с м . w i k i . ubuntu . com / U n i t s Po l i c y).
1 .7. МАN-СТРАНИЦЫ И ДРУГАЯ ОНЛАЙН-ДОКУМЕНТАЦИЯ
Традиционную онлайн-документацию образуют страницы с правочного руководства,
обычно называемые тап-страницами, потому что они считываются с помощью команды
man. ( Конеч но, в наши дни вся документация в той или иной форме находится в режиме
онл ай н . ) Справочн ы е стран ицы поставляются вместе с новым и пакетами программного
обеспечения. Даже в эпоху Google мы продолжаем рассматри вать с правочные страницы
как а вторитет н ы й ресурс , потому что они доступны из командной строки и , как пра­
вило, содержат п олную и нформацию о параметрах п рогра м м ы , а также демонстр ируют
полезные примеры и связанные с н и м и команды.
Справоч н ы е страницы - это краткое описан ие отдел ьн ых команд, драйверов, фор­
матов файлов ил и библ иотеч н ы х процедур. О н и не затрагивают более общие тем ы , та­
кие как " Как установить н овое устройство? " или " Почему эта с истем а так м едл е н н о
работает? "
Орга н иза ция mаn- стра ниц
Систе м ы Free BS D и Linux разделя ют m а n -стра н и ц ы н а разделы . И х базовая схема
показана в табл . 1 . 3 . Другие варианты U N IX иногда определ я ют раздел ы нескол ько
иначе.
Точ ная структура разделов н е важна для бол ьш инства тем , потому что человек на­
ходит соответствующую страницу там , где она хран ится . Просто учитывайте определе­
ния разделов, если тем а с тем же именем поя вляется в нескольких разделах. Например,
pas swd
это и команда , и конфигурацион н ы й файл , поэтому существуют соответству­
ющие записи как в разделе 1 , так и в разделе 5 .
-
Таблица 1 .3 . Разделы шаn-страниц
Раздел
1
Содержание
2
Пользовательские команды и приложе н ия
Системные вызовы и коды ошибок ядра
3
Библиотечные вызовы
4
Драйверы устройств и сетевые протоколы
5
Стандартные форматы файлов
6
Игры и демонстрации
7
Различные файлы и документы
8
Команды администрирования систе мы
9
Спецификации ядра и интерфейсы
Глава 1 . с чего начать
55
Команда man: чтение стра ниц интера кти вного руководства
Команда ma n з а г ол о в о к форматирует кон кретную стра н и цу и нтерактивного ру­
ководства и вы водит ее на терми нал пользователя с помощью утил ит mo r e , l e s s или
другой програ м м ы постран ичной разбивки , которая задана в пер е м е н ной окружения
PAGER. Аргумент з а гол о в о к
это, как правило, и м я команды, устройства или файла,
о которых необходимо получить справочную информацию . Поиск по разделам руковод­
ства осуществляется в порядке возрастан ия номеров, хотя разделы , посвященные описа­
н и ю команд ( 1 и 8), обычно просматриваются в первую очередь.
-
W Информаци ю о переменных окружения см. в разделе 7 . 2 .
Команда ma n р а з д е л з а гол о в о к вызывает с правоч ную страницу из указан ного
раздела. Так, в большинстве систем команда man sync вызы вает сп равоч ную страницу
для команды s yn c , а команда man 2 s yn c
для систем ного вызова s yn c .
Ком анда ma n - k клю ч е в о е_ сл о в о ил и a p r o p o s клю ч ев о е_ сл о в о выводит список
справочных страниц, в строке пояснений к которым и меется указан ное кл ючевое слово.
-
$ man - k translate
obj c o p y ( 1 )
d c ge t t e x t ( 3 )
tr ( 1 )
snmp t r a n s l a t e ( 1 ) tr
( lp )
-
с о р у and t r a n s l a t e ob j e c t f i l e s
t ra n s l a t e me s s age
t rans late o r delete characte r s
t r a n s l a t e SNMP OI D va l u e s i n t o mo r e u s e f u l i n f o rma t i on
translate charact ers
База дан н ых кл ючевых слов может устаре вать. П р и добавл е н и и новых справоч н ы х
страниц к с исте ме вам , возможно, придется перестроить этот файл с помощью команд
ma kewha t i s ( Red Hat и Free BSD) ил и mandb ( Ubuntu) .
Х ранение стра ниц интера ктивного руководства
Неформатирован н ая и н формация для справоч н ых стра н и ц ( входные дан н ые ко­
манды n r o f f ) обычно хран ится в подкаталогах каталога / u s r / s h a r e / ma n . В целях
экономии м еста на диске систе м ы Linux сжимают страницы с помощью утилиты g z i p .
Команда ma n может оче н ь быстро разархивировать их.
Команда ma n поддержи вает ке ш отформатирован н ых стра н и ц в каталогах / v a r /
c a c h e / ma n ил и / u s r / s h a r e /ma n , если соответствующие каталоги доступн ы дл я запи­
с и , но эти операци и рискован н ы с точки зрения безопасности. В бол ьш и нстве систем
предварительное форматирован ие справоч ных стран и ц выполняется однократно во вре­
м я инсталляции (см. команду c a tma n ) или не выпол няется совсем .
Команда ma n ищет страницы в ряде каталогов. В Linux-cиcтeмax выясн ить путь по­
ис ка позволяет команда ma npa t h . Результат ее работы (в системе Ubuntu) обычно таков.
ubun t u $ manpath
/ u s r / l o c a l /man : / u s r / l oc a l / s h a re /man : / u s r / s ha r e /man
Эта установка хран ится в пере м е н ной среды МАN РАТ Н , и в случае необходимости ее
можно измен ить.
$ export МANPATH=/home/ share/ localman : /usr/share/man
Н екоторые с истем ы позволя ют установить общесисте м н ы й параметр пути поис ка
для справочных страниц, который может оказаться полезн ы м в случае , есл и вам придет­
ся поддерживать паралл е льное дерево справоч ных страниц, например сгенерирован н ы х
кроссплатформе н н ы м менеджером пакетов Open P KG . Если ж е вы хот ите рас простра-
Часть 1. Основы администрирования
56
нять локальную документацию в виде справоч ных страниц, проще всего испол ьзовать
стандартный с исте м н ы й механ изм пакетирован ия и выложить с правоч н ы е стран ицы
в стандартные с правочные каталоги . Подробнее об этом написано в главе 6 .
1 .8. ДРУГАЯ ОФИЦИАЛЬНАЯ ДОКУМЕНТАЦИЯ
С правоч н ы е стра н и ц ы - это л и ш ь малая ч асть офи ци ал ьн о й докуме нтац и и .
Остальная в основном рассеяна в веб-пространстве.
Руководства по конкретн ым системам
Одн и п роизводител и систем ведут собстве н н ы е онлайн- проекты по подготовке до­
кументаци и , другие выпускают полезные руководства в виде объем н ых к н и г. В насто­
я щее вре мя н ужное руководство быстрее найти в И н тернете , чем в форме печатного
изда н и я . Объем и качество документации бы вают разн ы м и , но бол ьш инство произ­
водителей выпускает по м е н ьшей мере руководство по адм и н истрирова н и ю и инстал­
ляции систе м ы . Где найти документацию по каждому и з наших примеров систе м , по­
казано в табл . 1 . 4.
Несмотря на полезность этой документаци и , она н е относится к тем книгам , кото­
рые ч итают перед сном (хотя отдельные поставщики п и ш ут с правоч ные руководства,
которые могут усы п ить кого угодно). П режде чем обращаться к докуме нтации постав­
щиков, м ы обычно ищем ответы в системе Google.
Таблица 1 .4 . Где найти документацию о т производителей операционных систем
Система
UAL
DеЬiап
de Ь i a n . o r g / c om
Справочник для системного администратора, поставляемый
вместе с текущей версией системы
UbuЫu
h e l p . u b u n t u . c om
Дружественная к пользователю; версии LTS описаны в разде­
ле "server guide".
RHEL
r e d h a t . c om / d o c s
Исчерпывающая документация для систе мных админист­
раторов
CeпtOS
wiki . ceЬtos . org
Советы , подсказки и ответы на часто задава е мые вопросы
FreeBSD
f r e e b s d . o r g / do c s . html
Описание
Информацию для системного администратора см. в FreeBSD
Handbook
Документация по конкретн ым па кетам
Бол ьш ин ство важн е й ш и х програ м м н ых пакетов в м ире U N IX и Linux поддержива­
ют отдельные л и ца или такие сторонние организац и и , как I ntemet Systems Consortium
и Apache Software Foundation . Сотрудники этих груп п п ишут собственную документа­
цию, качество которой варьируется от плохого до замечательного. При этом существуют
и такие прекрасно выпол н е н н ы е документы, как Pro G it от g i t - s cm . / b o o k , которые
вполне оправдывают ожидания.
В число допол нительных документов входят: технические отчеты , проектные обосно­
вания и трактовки конкретных тем . Эти дополнительные материал ы зачастую н е ограни­
ч иваются простым описанием команд и могут включать самоучители и другие разделы .
М ногие программ н ые пакеты , помимо справочных стран и ц , содержат и статьи п о соот­
ветствующим темам . Например, после вызова справочной страницы для редактора vim
Глава 1 . С чего начать
57
вам будет предложено не только ознакомиться с аргуме нтам и командной строки, но и пе­
рейти к разделу, из которого в ы узнаете, как в действительности отредактировать файл.
Для большин ства проектов по разработке програм м ного обеспечения создаются спи­
с ки рассылки дл я пользователей и разработч иков, а также кан ал ы 1 RC дл я и нтернет­
чата. Если у вас возник вопрос о конкретной конфигурации или вы обнаружили ошиб­
ку, советуем в первую очередь обращаться туда.
Кн и ги
К самы м луч ш и м источн и кам информации дл я с истемных адми нистраторов в книж­
ном м ире можно отнести серию к н и г издательства O ' Reill y. Начало этой сер и и было
положено книгой UNIX in а Nutshell. Теперь же практически всем важны м подсистемам
и командам U N IX и Linux посвящен ы ее отдельные тома. Издательство O ' Reilly п убли­
кует также к н и ги о сетевых п ротоколах, операционной с истем е Microsoft Wi ndows и дру­
гим темам , не связа н н ым с U N IX. Все эти книги имеют при е млемую цену, с воеврем е н ­
н ы и ориентированы н а конкретную аудиторию.
М ногие читатели и здательства O ' Reilly используют и нтернет- магазин Safari Books
Online - службу подписки , предлагающую доступ к электро н н ы м к н и гам , видео и дру­
гим учебны м материалам. Н аряду с кн и га м и издательства O' Reilly в этом магазине мож­
но найти многочисленные к ниги других издателей.
Документы RFC
Документы и з сери и R FC ( Re quest for Comments - запрос н а комм ентар и и ) о п и ­
с ы вают п ротоколы и процедуры , испол ьзуемые в И нтернете . Бол ьш и н ство и з этих до­
куме нтов достаточн о детализированы и специализи рованы , но н екоторы е написаны
в в иде обзоров . И н формаци и , которую о н и содержат, впол н е можно доверять, но н е ­
которые из н и х я вл я ются всего л и ш ь обзорам и . Фраза " этал он н ая реализац и я " озна­
чает, что програм м а " разработан а надежны м источн и ком в соответствии со специфи­
кац и я м и R FC " .
Авторитет R F C незыблем , а н екоторых из документов этой серии достаточно полез­
н ые для систе м н ых администраторов. Подробное описа н ие этих документов приведен о
в разделе 1 3 . 1 . М ы будем часто ц итировать их в н а ш е й к ниге.
1 .9. ДРУГИЕ ИСТОЧНИКИ ИНФОРМАЦИИ
Источники, рассмотрен н ые в предыдущем разделе , изучены экспертами и написаны
авторитетн ы м и специалиста м и , но вряд ли это последнее слово в области управл е н и я
с истемами U N IX и Linux. В И нтернете доступн ы бесчисленные блоги, дискуссионн ы е
форумы и н овостные ленты.
Однако, что ни говорите , но Google - луч ш и й друг систем ного адми нистратора.
Если в ы и щ ите детали определен ной команды или формата файла, Googl e либо экви­
валентная поисковая система должны быть первым ресурсом, которы й вы запрашиваете
для л юбого вопроса систем ного адми н истратора. Сделайте это привычкой ; так вы избе­
жите задержек и униже н и й , когда на ваши вопросы в интерактивном форуме отвечают
с помощью ссылки на Google . 1 Если вы столкнулись со сложным вопросом, ищите ответ
в Интернете.
1 Или, что еще хуже, указывают ссыпку на Google через сайт lmgt f y . сот.
Часть 1. Основы администрирования
58
Сох ра нение а кт уал ь ност и
О перацион ные систе м ы , и нструменты и методы их поддержки быстро м е н я ются .
Советуем вам ежедневно прос матривать сайты , перечисл е н н ые в табл . 1 . 5 , чтобы быть
в курсе тенденций, наблюдае мых в отрасл и .
Табпица 1 . 5 . Актуальные ресурсы
Веб-сайт
Оnисание
d a r k re ading . c om
Новости о средствах безопасности , тенденции и обсуждение
devop s r e a c t i on s . t um Ы r . com
Юмор системных администраторов в анимированном виде
l i nux . c om
Сайт консорциума Liпux Fouпdatioп; форум полезен для новых
пользователей
l i n u x f ounda t i on . o r g
Некоммерческий проект компании OSS, работодателя Линуса
Торвальдса ( Uпus Torvalds)
l wn . n e t
Высококачественные, своевременные статьи о Liпux и OSS
l x e r . com
Новости о Liпux
s e c u r i t y f o c u s . c om
Отчеты об уязвимостях и списки рассылки, связанные с безопас­
ностью
@ Swi f t O n S e c u r i t y
Размышления о т имени Тейлор Свифт (Taylor Swift) о безопасно­
сти информации ( пародия )
@ nixcra f t
Твиты о системном администрировании UNIX и Liпux
eve r y t h i n g s y s a dmi n . с от
Благ Томаса Лимончелли (Tomas Limonchelli), авторитетного си­
стемного администратора•
s y s a dvent . Ы o g s p o t . с от
Благ для системных администраторов, публикующий статьи каж­
д ый декабрь
o r e i l l y . coт/ t o p i c s
Учебные ресурсы издательства O' Reilly п о многим темам
s chne i e r . сот
Благ Брюса Шнайера ( Bruce Schneier), эксперта по криптографии
и безопасности
• см. также сборник Томаса Лимон челли April Fools 's RFC на сайте r f c - humo r . сот
Социальные сети также полезн ы. Twitter и Reddit , в частности, имеют с ильные со­
общества с бол ьш и м количеством предложе н и й , хотя отношение сигнал - шум в этих се­
тях и ногда может быть довольно плохим . Н а сайте Reddit присоедин яйтесь к разделам
основного форума s y s adm i n , l i nu x , l i nuxadmi n и n e t s e c .
П ра кти ческие руко в одства и сп равочные сайты
Сайты , перечисле н н ы е в табл . 1 .6 , содержат руководства, учебники и статьи о том ,
как выпол нять определенные задач и в U N IX и Linux.
Таблица 1 . 6 . Сnециапьные форумы и справочные сайты
Веб·саiт
w i k i . a r c h l inux . o r g
a s kubun t и . с от
d i g i t a l o c e a n . сот
О n иоа им е
Статьи и руководства п о Arch Liпux; многие и з них носят более общий
характер
Вопросы и ответы для пользователей и разработчиков Ubuntu
Уче б ники по многим темам OSS, разработки и системного
администрирования•
Глава 1 . с чего начать
59
Окончнаие табл. 1 . 6
Веб-сайт
Описание
kernel . org
Официальный сайт ядра Liпux
s e rve r f a u l t . c om
Совместно отредактированная база данных вопросов системного адми­
нистрированияб
s е rve r s f or hac ke rs com
•
Высококачественные видеоролики, форумы и статьи о системном адми­
нистрировании
' C м . D i g i t a l o c e a n . com / c ommun i t y / t ut o r i a l s
б
Также с м . аналогичный сайт s t a c kove r f low . c om, посвященный программированию, но полезны й и для систем­
ных администраторов
Сайты Stack Overflow и Server Fault , указанные в табл . 1 . 6 (оба входят в группу сай­
тов Stack Exchange) , требуют более пристального взгляда. Если у вас возникла проблема,
скорее всего, кто-то с ней уже сталкивался и попросил о помощи на одном из этих сай­
тов. Авторитетны й формат вопросов и ответов, испол ьзуе м ы й сайта м и Stack Exchange ,
хорошо подходит для тех п робл е м , с которы м и сталк иваются систе м н ые адми н и стра­
торы и программисты . Рекомендуем создать учетную запись и присоедин иться к этому
бол ьшому сообществу.
Конференции
Отраслевые конферен ц и и - отл и ч н ы й с пособ н аладить связь с другим и п рофесси ­
оналами , следить з а технологически м и тенде нциями , п роходить учебные курсы , полу­
чать сертификаты и узнавать о последних услугах и продуктах. В п оследние годы рез­
ко возросло коли чество конферен ц и й , связанных с с исте м н ы м адм и н истрированием .
Некоторые из наиболее известны х конференций предстаме н ы в табл . 1 .7 .
Таблица 1 . 7 . Конференции п о систем ному администрированию
Конференция
Место
В рем•
Описание
LISA
Переменное
4 кв.
Управление инсталляцией крупных систем
Moпitorama
Портленд
Июнь
Инструменты и методы мониторинга
OSCON
Переменное (США/ЕС)
2 или з кв.
Долгосрочная конференция O' Reilly OSS
SCALE
Пасадена
Я нварь
Southerп California Liпux Ехро
DefCoп
Лас- Вегас
Июль
Самый старый и самый большой съезд хакеров
Velocity
По всему миру
Переменное
Конференция O' Reilly по веб-операциям
BSDCaп
Оттава
Май-июнь
Все о BSD для новичков и гуру
re: lпveпt
Лас-Вегас
4 кв.
АWS-конференция по облачным вычислениям
в Лас-Вегасе
VMWorld
Переменное (США/ЕС)
з или 4 кв.
Виртуализация и облачные вычисления
LiпuxCoп
По всему миру
Переменное
Будущее Liпux
RSA
Сан-Франциско
1 кв. или 2 кв.
DevOpsDays
По всему миру
Переменное
Ряд тем для преодоления разрыва между командами разработки и групп по эксплуатации
QСоп
По всему миру
Переменное
Конференция для разработчиков программного обеспечения
Промышленная криптография и безопасность
информации
Часть 1. Основы администрирования
60
M eetups (me e t u p . c om)
это е ще оди н с пособ обще н ия с едином ы шле н н и кам и .
В большинстве городов С ША, как и во всем мире, есть групп ы пользователей Linux ил и
DevOps, спонсирующие ораторов, дискусси и и хакерские сем инары.
-
1 . 1 О. Спосо&ы поискА и УСТАновки
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Подгоrовка к работе программного обеспечения подробно рассматривается в главе 6. Но
для самых нетерпеливых мы прямо :щесь расскажем о том , как выяснить, чrо уже установле­
но в вашей системе, и как получить новое программное обеспечение и инсталлировать его.
В совреме н н ых операцион н ых системах програ м м ное обес печение разделено на па­
кеты , которые можно инсталлировать независимо друг от друга. П р и стандартной уста­
новке с исте м ы используется группа "стартовых" пакетов, которую можно при н еобхо­
димости расш ирить.
Добавоч н ые п рограм м н ые продукты зачастую предоставляются также в виде пред­
варительно ском п илирова н н ых пакетов, но дале ко не во всех с истемах. Большая часть
программного обеспечения создается независи м ы м и группами разработчи ков, выпуска­
ющим и программ ы в виде исходных кодов. Репозитории пакетов затем берут исходн ые
коды , комп ил ируют их в соответствии с особенностя м и кон кретной систе м ы и вкл ю ­
чают в пакеты получ е н н ые би нарные файл ы . Как правило, нам ного проще инсталл и­
ровать бинарную верси ю пакета, п редназнач е н н ую для дан ной систе м ы , чем искать
и компилировать исходн ы й код. Одн ако нужно учитывать, что и ногда создател и п акетов
на оди н-два выпус ка отстают от текущей верси и систе м ы .
Если в двух системах используется один и тот же формат обработки пакетов, 10 это еще
не означает, чrо пакеты обеих систем будут взаи мозаменяемыми. Например, в системах Red
Hat и S US E применяется формат RPM , однако структура их файловых систем неодинакова.
Рекомендуется всегда пользоваться пакетами, со:щанными для конкретной системы.
В рассматриваемых нами дистрибутивах предусмотрен ы отлажен н ые систем ы управ­
л е н и я пакета м и , которы е вкл ючают средства доступа к репозитори я м п ро гра м м н ы х
продуктов и поиска их в И нтернете . Дистрибьюторы активно поддерживают эти репо­
зитори и от и м е н и сообщества , которое они представляют, чтобы облегч ить процесс ис­
правления и обновления систе м . Другим и словами , жизнь прекрасна!
Адми нистраторы без доступа к предварительно скомпонован н ы м бинарным версиям
пакеrов должны инсталлировать системы по-старому, т.е. загружать архив исходного кода
tar, а затем вручную конфигурировать, компилировать и инсталлировать систему. Иногда
этот процесс проходит гладко, а иногда может превратиться в кош мар: все зависит от ис­
пользуемого программ ного обеспечен ия и конкретной операцион ной системы .
В этой книге м ы п редполагаем , что дополн ительное программ ное обеспечение уже
установлено, и не собирае мся м уч ить вас ш аблон н ы м и и нструкци я м и по и нсталля ­
ц и и каждого пакета. П р и необходимости м ы будем указывать точ ные названия пакетов
для выполнения кон кретного проекта. Однако большей частью мы не будем повторять
инструкции по и нсталляции, поскольку они практически идентичны для всех пакетов.
К а к оп редел ить, установлено ли п рограм м ное обеспечение
П о целому ряду причин может быть сложно определ ить, какой пакет содержит про­
грам м ное обеспечение , которое вам действител ьно нужно. В место того чтобы начинать
с уровня пакета, проще испол ьзовать команду оболочки и выясн ить, находится ли со-
Глава 1 . С чего начать
61
ответствующий бинар н ы й файл в ваш е м пути поиска. Например, следующая команда
показывает, что компилятор G N U С уже установлен на этом комп ьютере:
ubu n t u $ which gcc
/ u s r /Ь i n / gc c
Если в ы не можете найти нужную команду, попробуйте выпол н ить команду whereis;
она и щет более ш ирокий набор систе м н ых каталогов и н е зависит от п ути поиска вашей
оболочки.
Другой ал ьтернативой я вл яется н евероятно полезная команда l o c a t e , которая
справляется с предварител ьно скомп ил ирова н н ы м и ндексом файловой систе м ы , чтобы
найти и м е на файлов , которые соответствуют определ е н ному шаблону.
Система Free B S D реализует ком анду l ocate как часть базовой систе м ы . В с истем е
Linux текущая реал и зация команды locate н аходится в пакете mlocate. В с истемах
Red Hat и CentOS установите пакет mlocate с помощью ком анды yum; см. раздел 6.4.
Ком а нда locate может найти л юбой тип файла, но это н е относится к командам
ил и п а кета м . Напр и м е р , есл и в ы н е были увере н ы , где н айти подключае м ы й файл
signal . h , вы м ожете попробовать выпол нить следующую команду.
f r e e b s d $ locate s ignal . h
/u s r / i n c l ude /mac h i n e / s i gn a l . h
/ u s r / i n c l ude / s i gn a l . h
/ u s r / i n c l u de / s y s / s i gn a l . h
База да н н ы х команды locate периодически обновляется командой updatedЬ ( в
систем t Fre e B S D - командой locate . updatedЬ ) , которая запускается из программы
cron. Поэтому результаты поиска не всегда отражают недавние изменения файловой си­
стемы.
Зная имя пакета, которы й ищете, вы также можете испол ьзовать утилиты для упаков­
ки систе м ы , чтобы н апрям ую проверить наличие пакета. Например, в с истеме Red H at
следующая команда проверяет наличие (и установленную версию) и нтерпретатора Python:
r e dha t $ rpm -q python
p y t h o n - 2 . 7 . 5 - 1 8 . e l 7 _1 . l . x 8 6_ 6 4
W Дополнительную и нформаци ю о б управле нии пакетами см. в главе 6 .
Вы также можете узнать, к какому пакету принадлежит определен н ы й файл :
redha t $ rpm -qf /etc/httpd
HTT P D - 2 . 4 . 6 - 3 1 . e l 7 . c e n t o s . x 8 6 6 4
f r e e b s d $ pkg which /usr/ local / sbin/httpd
/ u s r / l o c a l / s Ь i n / h t tpd w a s i n s t a l l e d Ьу p a c k a g e a p a c he 2 4 - 2 . 4 . 1 2
ubun t u $ dpkg-query -S /etc/apache2
apach e 2 : / e t c / ap a c h e 2
Доб а вление нового п рограммного обеспечения
Если в а м необходимо установить допол нительное программное обеспечен и е , сначала
следует определить каноническое имя соответствующего пакета программ ного обеспе­
чения. Например, вам нужно будет перевести фразу Я хочу установить locate " в " Мне
нужно установить п акет ml ocate " или перевести " М н е н ужен с правоч н и к named"
в " М не нужно установить B I N D " . В этом м ожет помочь цел ы й ряд с исте м н ых и ндек"
Часть 1. Основы администрирования
62
сов в И нтерн ете , но Google , как правило, так же эффективен . Например, поиск " locate
command" приводит вас непосредственно к нескольким соответствующим обсуждениям.
В следующих примерах показана инсталл я ция команды tcpdwap для каждой и з наших
иллюстративных систем. Команда tcpdump
это и нструмент для захвата пакетов, позво­
ляющий просматривать исходные пакеты, отправляемые в систему и из системы в сети.
-
В с истемах Deblan и Ubuntu и с пол ьзуется програм м а АРТ
Advanced Package Tool.
-
Deblan
ubun t u # sudo apt-qet install tcpdump
Re ading pac kage l i s t s . . . Done
Building dependency t r e e
Re ading s t a t e i n f o rmat i o n . . . Done
The f o l l owing NEW p a c kages wi l l Ье i n s t a l led :
tcpdump
О upgraded, 1 newl y i n s t a l l e d , О to remove and 8 1 not upgraded .
Need to g e t О В / 3 6 0 kB o f archive s .
A f t e r t h i s ope r a t i o n , 1 , 1 7 9 kB o f add i t i onal di s k space w i l l Ье u s e d .
S e l e c t ing previous l y uns e l ected package tcpdump .
( Reading databa s e . . . 6 3 8 4 6 f i l e s and d i r e c t o ri e s cu r re n t l y i n s t a l l e d . )
Preparing t o unpack . . . / tcpdump_4 . 6 . 2 - 4 ubuntul_amd 6 4 . deb
Unpacking tcpdump ( 4 . 6 . 2 - 4 ubuntu l ) . . .
Proce s s ing t r i gg e r s for man-db ( 2 . 7 . 0 . 2 - 5 )
S e t t i ng u p t cpdump ( 4 . 6 . 2 - 4 uЬunt u l ) . . .
RHEL
В с истемах Red Hat и CentOS аналогичная версия выглядит следующ и м образом.
r e dha t # sudo yum install tcpdump
Loaded p l u g i n s : f a s t e s tmi r r o r
De t e rmi n i n g f a s t e s t mi r r o r s
* b a s e : mi r r o r s . xmi s s i o n . com
* e p e l : l i nu x . mi r r o r s . e s . ne t
* e x t r a s : c e n t o s . a r v i x e . c om
* updat e s : r e p o s . l a x . qu a d r a n e t . com
Re s ol v i n g Dependenci e s
- - > Runn i n g t ra n s a c t i on che c k
- - - > P a c kage t c pdump . x 8 6_ 6 4 1 4 : 4 . 5 . 1 - 2 . е 1 7 wi l l Ь е i n s t a l l e d
- - > F i n i s h e d Dependency Re s o l u t i on
t cp dump - 4 . 5 . 1 - 2 . e l 7 . x 8 6_ 6 4 . rpm 1 3 8 7 kB 0 0 : 0 0
Run n i n g t r a n s a c t i o n c he c k
Run n i n g t ra n s a c t i o n t e s t
T r a n s a c t i o n t e s t s uc c e e d e d
Run n i n g t r a n s a c t i on
I n s t a l l i n g : 1 4 : t c pdump - 4 . 5 . l - 2 . e l 7 . x 8 6_ 6 4 1 / 1
Ve r i f y i n g : 1 4 : t cpdump - 4 . 5 . 1 - 2 . e l 7 . x 8 6_ 6 4 1 / 1
Installed :
t c pdump . x 8 6_ 6 4 1 4 : 4 . 5 . 1 - 2 . е 1 7
Comp l e t e !
Менеджер пакетов в системе Free B S D называется pkg.
f re e b s d # sudo pkq install -у tcpdump
Upda t i n g F r e e B S D repos i t o r y catal ogue . . .
Fetching me t a . tx z :
100%
944 В
0 . 9kB/s
00 : 01
Глава 1 . С чего начать
63
Fetching package s i t e . tx z :
100%
5 MiB
5 . 5 MB / s
00 : 01
Proce s s ing e n t r i e s : 1 0 0 %
F r e e B S D repo s i t o r y upda t e comp l e t e d . 2 4 6 3 2 packages p r o ce s s e d .
Al l repo s i t o r i e s a r e up - t o -da t e .
The f o l l owing 2 pac kage ( s ) w i l l Ье a f f e c t e d ( o f О checked ) :
New package s to Ье I N S TALL E D :
tcpdump : 4 . 7 . 4
l i b smi : 0 . 4 . 8 1
The proce s s wi l l r e qui r e 1 7 M i B mo re space .
2 M i B to Ье downl oaded .
Fetching t cpdump - 4 . 7 . 4 . tx z :
100%
3 0 1 KiB
Fetching l i b smi - 0 . 4 . 8_ 1 . tx z :
100%
2
MiB
Checking i n t e g r i t y . . . done ( 0 con f l i ct i n g )
( 1 / 2 ] I n s t a l l ing l ibsmi - 0 . 4 . 8_ 1 . . .
( 1 / 2 ] E x t r a c t i n g l ibsmi - 0 . 4 . 8_ 1 : 1 0 0 %
[ 2 / 2 ] I n s t a l l ing t cpdump - 4 . 7 . 4 . . .
[ 2 / 2 ] E x t r a c t i n g tcpdump- 4 . 7 . 4 : 1 0 0 %
3 0 7 . 7 kB / s
2 . 0MB / s
00 : 01
00 : 01
Созда ние п рограммного обеспечения из и с ходного к од а
В качестве иллюстраци и рассмотрим процесс создан ия версии tcpdump из исходного
кода.
Первая задача - найти сам код. Сторонн и ки програм м ного обеспе ч ения иногда хра­
нят индекс выпусков на веб-сайте проекта, которые можно загрузить в виде архивов. Для
проектов с открытым исходным кодом вы, скорее всего, найдете код в репозитори и Git.
Источн и к tcpdum.p хранится в репозитори и GitHub. Выпол н ите клонирование ре­
позитори я в каталоге / tmp, создайте ветку с тега м и , котору ю в ы хотите создать, затем
распакуйте , настройте , создайте и установите :
redh a t $ cd / tmp
redha t $ qi t clone https : / /qi thuЬ . com/ the - tcpdump-qroup/ tcpdump . qit
< s t a t u s me s s a g e s a s r e po s i t o r y i s c l on e d >
redha t $ cd tcpdump
redha t $ qi t checkout taqs/ tcpdump- 4 . 7 . 4 -Ь tcpdump- 4 . 7 . 4
Swi t c h e d t o а new b r anch ' t cp dump - 4 . 7 . 4 '
redh a t $ . / confiqure
che c k i n g b u i l d s y s t em t yp e . . . x 8 6_6 4 - un known - l i n ux - gn u
che c k i n g h o s t s y s t em t yp e . . . x 8 6_ 6 4 - u n known - l i n u x - gnu
che c k i n g for gcc . . . g c c
che c k i ng wh e t h e r t h e С c omp i l e r wo r k s . . . ye s
redha t $ make
< s eve r a l p a g e s o f comp i l a t i on outpu t >
redh a t $ sudo make ins tal l
< f i l e s a r e moved i n t o p l a c e >
Эта последовательность configure /m.ake /m.ake устанавли вается для бол ьш инства
програм м , написанн ых на языке С, и работает во всех системах U N IX и Linux. Всегда
полезно проверить файл INSTALL или READМE пакета для уто ч нения. Должна быть уста­
новлена среда разработки и любые необходимые для пакета требования. ( В случае паке­
та tcpdump необходимой предпосылкой я вл яется уста н овк а библ иотеки l ibpcap и со­
путствующих библиотек.)
Часть 1. Основы администрирования
64
Зачастую воз н икает необходимость настроить конфигурацию сборк и , поэтому ис­
пользуйте команду / configure - -help, чтобы просмотреть параметр ы , доступные
дл я каждого конкретного пакета. Други м полез н ы м параметром команды configure
является -prefix directory, которы й позволяет с комп илировать программ ное обе­
спечение дл я установки где-то, кроме /usr/ local , которое обычно я вляется значением
по умолчан ию.
.
=
Установ к а с по м ощью веб- сценария
Кросс- платформ е н н ые пакеты програм м ного обеспечен ия все чаще предлага ют
ускоре н н ы й процесс установки , которы й управляется сце нарием оболочки , загружае­
мым из И нтернета с помощью команд curl , fetch или wget.2 Например, чтобы настро­
ить маш ину как клиент Salt , вы можете выпол н ить следующие команды:
$ curl о / tшp/ s al tЬoot -sL https : / /bootstrap . saltstack . com
$ sudo sh / tшp/ saltЬoot
-
Сценарий boo t s t rap исследует локал ьную среду, затем загружает, и нсталл и рует
и настраивает соответствующую версию программного обеспечен и я . Этот тип и нстал ­
ляции особенно распространен в тех случаях , когда сам процесс сложен , но поставщик
оче н ь мотивирован , чтобы облегчить пол ьзователя м работу. ( Еще оди н хороший при ­
мер
RVM , с м . ра�ел 7 . 7 . )
-
III Дальнейшую информаци ю о б инсталляции пакетов см . в главе 6 .
Этот метод установки отл ич но работает, но о н подни мает нескол ько п робл е м , ко­
торы е стоит упомя нуть. Во-первых, о н н е оставляет должной запи с и об и нсталля­
ц и и для будущих ссылок. Есл и ваша операцион н ая с исте ма предлагает пакетную
верси ю п рограм много обеспече н и я , обыч н о луч ш е установить пакет вместо запус ка
веб - и нсталлятора. П акеты легко отслеживаются , обновляются и удал я ются . (С другой
сторо н ы , бол ьш инство пакетов на уровне операцион ных систем устарели . Вероятно, вы
не получ ите самую последнюю верси ю програм много обес печения.)
III Более подробную информацию о цепочке доверия НТТРS см. в разделе 27. 6 .
Будьте оче н ь подозрител ьны м и , если U RL-aдpec загрузочного сценария небезопасен
(т.е. он н е начинается с префикса https : ) . Незащищенный НТГР я вляется легкоуязви­
мым дл я захвата, а U RL-aдpeca и нсталляции представляют особый и нтерес для хакеров,
потому что они знают, что вы, с корее всего , будете работать в качестве привилегиро­
ванного пользователя , независимо от того, какой код возвращается. В отличие от этого,
протокол НТГРS проверяет подл и нность сервера с помощью криптографической це­
почки доверия . Это н е вполне, но достаточно надежны й способ.
Некоторые продавцы публикуют U RL-aдpec и нсталл я ции по протоколу НТТР. кото­
рый автоматически перенаправляет пользователя на НТГРS-версию. Это глупо и на самом
деле не более безопасно, чем прямой адрес НlТР. Н и что не мешает перехвату исходного
НlТР-обмена, поэтому вы, возможно, никогда не достигнете перенаправления поставщика.
Однако наличие таких переадресаций означает, что стоит попробовать собственную замену
https для http в небезопасных U RL-aдpecax. Чаще всего это работает отлично.
Оболоч ка принимает текст сценария как свой стандартн ы й вход, и эта функция по­
зволяет испол ьзовать процедуры инсталляции в режиме онлайн , например:
$ curl -L https : / /badvendor . com 1 sudo sh
2Эrо все простые НТТР-клиенты, загружающие содержим ое U RL-aдpeca в локал ьн ы й файл или
(необязательно) распечатывающие содержимое в виде результата своей работы.
Глава 1 . С чего начать
65
Тем н е менее существует потенциал ьная проблема, связанная с этой конструкци­
ей, - корневая оболочка все е ще работает, даже есл и команда cur l выводит частич ­
н ы й сценар и й , а затем терп ит неудачу - с каже м , из-за кратковре м е н ного сбоя сети.
Конечный результат непредсказуем и потен циально не очен ь хорош.
Нам неизвестны какие-либо докуме нтированные случаи проблем , связан н ых с этой
причиной. Тем не менее это правдоподобн ы й режим отказа. Более того, направление
результатов работы команды curl в оболочку в среде с исте м н ы х адми н истраторов рас­
сматри вается как тип и ч н ы й промах новичков, поэтому, есл и вы это сделаете , н и кому
об этом не говорите.
Исправить ситуаци ю легко: просто сохраните сценарий во времен ном файле, а затем
запустите сценарий на отдел ьном этапе после успеш ного завершения загрузки.
1 . 1 1 . ГДЕ РАЗМЕСТИТЬ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
Операцион н ы е систе м ы и програм м ное обеспечение могут размещаться в частных
центрах обработки данн ых, на объектах совместного размещения, на облачной платфор­
ме ил и в некоторой их комбинации . Наиболее быстро растущие начи нающие компани и
выбирают облако. У сол идных предприятий, вероятно, есть центры обработки данных,
поэтому они могут организовать частное облако внутри организации.
Самы й практичный выбор и наша рекомендация для новых прое ктов - это публич­
н ые облачные провайдеры. О н и предоставляют множество преимуществ по сравнен и ю
с центра м и обработки дан н ых.
•
Отсутствие капитальных затрат и н изкие начальн ые эксплуатационн ые расходы.
•
Отсутствие необходимости устанавливать, защи щать и управлять оборудование м .
•
•
•
Ре гул и ровка е м кост и , пропускной способности и выч исл ител ьной мощности
по требованию.
Готовые решения для общих вспомогательных потребностей , таких как базы дан ­
н ы х , балансировки нагрузки, очереди , мониторинг и т.д.
Более дешевая и простая реализация высокодоступных или избыточ ных с исте м .
Ранн и е облачные с исте м ы и м ел и репутацию слабо защище н н ых и н изкопроизводи­
тельных, но это уже не я вляется серьезной проблемой. В наши дни большая часть адм и ­
н истративной работы выпол няется в облаке (см. главу 9 для общего введения в тему) .
Наша предпочтител ьная облачная платформа я вляется л идером в своей области :
Amazon Web Seivices (AWS). Gartner, ведущая исследовательская фирма п о технологиям ,
обнаружила, что AWS в десять раз превосходит всех кон курентов. AWS быстро внедряет
и н новации и п редлагает гораздо более ш ирокий спектр услуг, чем л юбой другой постав­
щик. Она также имеет отличную репутацию по обслуживани ю клие нтов и поддерживает
большое сообщество. На первых порах AWS предлагает бесплатный уровен ь обслужива­
н и я , включая использование в течение года маломощного облачного сервера.
Облач ная платформ а Google ( G C P) активно соверше нствует и продает свои про­
дукты. Н екоторые утверждают, что эта технология не и меет себе равных по сравне н и ю
с другим и поставщикам и. Рост G C P был медлен н ы м , отчасти благодаря репутаци и ком ­
пан и и Google, отказавшейся поддерживать несколько популярных служб. Те м не менее
е го удобн ы е дл я клие нта условия ценообразован ия и у н и кал ьные фун кции я вляются
привлекательн ы м и характеристиками .
Digita\Ocean - это более простая служба, целью которой я вляется высокая произ­
водительность. Она ориентирована на разработч иков, которы м Digita\Ocean предла-
Часть 1. Основы администрирования
66
гает я с н ы й и нтерфейс прикладного программ и рован и я , н изкую цену и чрезвычайно
быструю загрузку. Разработчики DigitalOcean - ярые сторо н н и ки программного обеспе­
чения с открытым исходным кодом , а их учебники и руководства по популярны м и нтер­
нет-технологиям я вляются одни м и из луч ш их.
1 . 1 2. СПЕЦИАЛИЗАЦИЯ И СМЕЖНЫЕ ДИСЦИПЛИНЫ
Систе м н ые адм и н истраторы работают н е в вакууме ; создавать и поддержи вать слож­
ную сеть должна команда экспертов. В этом разделе описываются некоторые рол и , ко­
торые системные адми нистраторы могут выполнять в соответствии со с воим и навыками
и возможностям и . Н е которы е адми н истраторы предпоч итают специализироваться в од­
ной ил и нескол ьких из этих областей .
В а ш а цел ь к а к систе м ного адми н истратора или к а к п рофессионала, работающего
в любой из этих смежных областей , - достижение целей организации. Не позволя йте
пол итике или иерархии мешать прогрессу. Луч ш ие адм и н истраторы решают п роблем ы
и с вободно обме н и ва ются и нформацией с другим и .
М етодология DevOps
Ш Дополнительную информаци ю о методологии DevOps см. в главе 3 1 .
DevOps - это н е стол ько специфическая методология , сколько культура или фило­
софия работы . Ее цел ь - повы шение эффективности создания и поставки програм м ­
ного обеспече н и я , особенно в крупных организациях, в которых существует множество
взаимосвязанных служб и команд. Организации, внедрившие методику DevOps, стиму­
лируют инте грацию м ежду и нжен ер н ы м и командами и могут не делать разл ич ия м ежду
разработкой и эксплуатаци е й ил и н е придавать и м значения. Эксперты, работающие
в этой области , и щут неэффективные процессы и заменяют их небол ьш и м и сценария м и
оболочки или больш и м и и громоздким и репозиториями Chef.
И нженеры по надежности сайтов
И н женеры по надежности сайтов ставят н а первое место время безотказной и пра­
вильной работы. Мониторинг сети , разверты вание программ ного обеспечения на про­
изводстве , координация работ, план ировани е будуще го расширения и аварий н ы е от­
кл ючен и я - все это лежит в основе эти х крестоносцев доступност и . Головной бол ью
инженеров по надежности сайта я вляется единствен ная точка отказа.
И нженеры по безопасности
Инженеры по безопасности сосредоrочены на практической, повседневной стороне ин­
формационной безопасности. Эrи люди устанавливают и используют инструменты дЛЯ по­
иска уязвимых мест и мониторинга дЛЯ предотвращения сетевых атак. Они также участвуют
в имитации атак, чтобы оценить эффективность методов их профилактики и обнаружения.
Сетевые администраторы
Сетевые адм ин истраторы проектируют, устанавл ивают, настраивают и управляют се­
Организаци и , в которых фун кционируют центры обработки дан н ых, скорее всего,
будут использовать сетевых адм и нистраторов; это объясняется тем , что такие объе кты
п1 м �1 .
Глава 1 . С чего начать
67
и м е ют множество физических переключателей, маршрутизаторов , брандмауэров и дру­
гих устройств, которы м требуется управление. Облачн ы е платформ ы также предлагают
м н ожество сетевых опци й , но обычно они не требуют специал ьного адм и н истратора,
поскольку бол ьшая часть работы вы пол няется поставщиком.
Адм и н и стратор ы б аз д а н н ы х
Адм и н истраторы баз дан ных являются экс пертам и по установке и управлению про­
грам мным обеспечением баз дан н ых. Они управляют схемами базы дан н ых, выполняют
установки и обновления , настраивают кластеризацию, выбирают параметры для оптимал ь­
ной производительности и помогают пользователям формулировать эффе ктивные запросы.
Адм ин истраторы баз данных обычно владеют одним или н ескольким и языкам и запросов
и имеют опыт работы с реляцион ными и нереляционными (NoSQL) базами данн ых.
И нженеры центра с етевы х опер а ци й
И нже неры центра сете вых операций контрол и руют состоя н и е крупн ых объе ктов
в режи ме реального времени и отслеживают инциденты и сбои. О н и при н и м ают запро­
сы на устран е н ие ошибок от пользователе й , выполняют обычные обновления и коорди­
н ируют действия других команд. И х чаще все го можно найти набл юдающи м и за пане­
л ью мон иторов, н а которых демонстрирутся графики и измерения.
Тех н ичес кие с пеци а л и с ты центров обработки д ан н ы х
Технические специал исты центров обработки дан н ых испол ьзуют аппаратн ые сред­
ства. О н и получают новое оборудован и е , ведут и н вентарный учет, следят за жизн е н н ы м
циклом оборудования, устанавливают серверы в стойки, управляют кабелям и , поддер­
живают энергопитан ие и кондицион ирование воздуха, а также выпол н я ют ежедне вные
операции по эксплуатации центра обработки дан н ых. С исте м ному администратору же­
лательно дружить с технически ми специалистами центров обработки дан н ых , подпаи вая
их кофе , энергетически м и нап итками и алкоголем .
А рх ите ктор ы
Систе м н ые архите ктор ы обладают глубокими знани я м и в более ч е м одной обла­
сти. О н и испол ьзуют свой опыт для разработки распределен н ых систе м . Их должност­
ные инструкции могут предусматривать определ е н ие зон безопас ности и сегме нтацию,
устранен ие отдельных точе к отказа, план ирование будущего роста, обеспечение взаи мо­
действия между несколькими сетя м и и третьи ми сторонам и , а также принятие реш е н и й ,
касающихся всей организации. Хорошие архитекторы технически ком п етентн ы и обыч­
но п редпоч итают внедрять и тестировать свои собствен н ы е прое кты .
1 . 1 3 . Л ИТЕРАТУРА
•
А ввотт, МлRП N L. , AN D М 1 с н л н Т. F 1 s H E R . The Art of Scalabllity: Sса!аЬ/е Web
Architecture, Processes, and Organizations for the Modern Enterprise (2nd Edition) .
Addison-Wesley Professional, 20 1 5 .
•
GлNcлRZ, М 1 кЕ . Linux and the Unix Philosophy. Boston: D igital Press, 2003.
•
L1моNСЕШ , Тномлs А. , AN D РЕТЕR Sлшs. The Comp/ete April Fools ' Day RFCs.
Часть 1. Основы администрирования
68
•
Peer-to- Peer Communications LLC. 2007. Юмор инженеров. Эту коллекцию истори й
можно свободно прочитать на сайте r f c - humo r . c om.
•
RAvмoND, E R J c S. The Cathedral & The Bazaar: Musings оп Linux and Ореп Source Ьу ап
Accidental Revolutionary. Sebastopol , СА: O ' Reilly Media, 200 1 .
•
SAшs, РЕТЕR Н . The Daemon , the G N U & the Pengui n : How Free and Ореп Software
is Changing the World. Reed Media Services, 2008. Это увлекательная история борьбы
за открытый исходный код, написанная самым известны м историком U N IX , так­
же доступна на сайте g ro k l a w . com под л ицензией Cгeative Commons. Адрес U RL
для самой книги довольно дл и н н ы й ; н айдите текущую ссылку на сайте g r o k l aw .
com или попробуйте этот сжатый эквивалент: t i n yu r l . com/ d бu 7 j ) .
•
S I EVER, ELLE N , STEPH E N FюG J N S , RoвERT LovE , AN D ARNOLD Roвв1Ns. Linux in а Nutshell
(бth Edition). Sebastopol, СА: O ' Reil\y Media, 2009.
Систе мное а дмин истрирова ние и методол огия DevOps
•
К 1 м , G EN E , KEVI N B E H R , AND G F.ORG E S PA FF O R D . The Phoenix Project: А Novel about
/Т, DevOps, and Helping Your Business Win. Portland, OR: 1Т Revolution Pгess, 20 1 4.
Введение в философию и принципы создания современ ной IТ-организаци и , на­
писанная в повествовательном стиле. Н епреходящая классика.
•
К1 м , G E N E , J EZ Н u м вL Е , PATRICK D E вo 1 s , A N D J o н N W1 LL1s. The DevOps Handbook:
Ноw to Create World-Class Agility, Reliabllity, and Security iп Technology Organizations.
Portland, OR: 1Т Revolution Press, 20 1 6.
•
L1 мoNCELLI , ТномАs А. , CHRISТ I NA J . H oGAN , AND S т RATA R . СнАШР. The Practice о/
System and Network Administration (2nd Edition). Reading, МА: Addison-Wesley, 2008 .
Это хорошая книга, в которой очен ь подробно описа н ы организационн ы е и про­
цедурн ы е аспекты системного адми н истрирования Авторы ведут блог, пос вя ще н ­
н ы й системному адми нистрированию: eve r yt h i n g s y s a dmi n . c om.
•
L1 м oNCELL I , ТномАs А. , C н R I SТI NA J. HoGAN , AND S тRАтА R . СнАШ Р. The Practice о/
Cloud System Administration. Reading, МА: Addison-Wesley, 20 1 4. Книга предыдущих
авторов, посвящен ная распределе н н ы м систе мам и облачн ы м вычислениям.
Ва жн ые инструменты
•
B L u м , R 1cнAR D, AND Снюsп N Е B R ESNAHAN . Linux Command Line and She/l Scripting
ВiЫе (Зrd Edition). Wiley, 20 1 5 .
•
Dou a н E RТY, DALE, AND ARNOLD Roв 1 N s . Sed & A wk (2nd Edition) . Sebastopol , СА:
O' Reilly M edia, 1 997. Классическая книга издательства O ' Reilly о мощных и ш и ­
роко распространенных текстовых процессорах sed и awk.
•
Кl м , РЕТЕR. The H acker Playbook 2: Practical Guide То Penetration Testing. CreateSpace
l ndependent PuЫ ishing Platform , 20 1 5 .
•
N ш., D REW. Practical Vim: Edit Text at the Speed о/ Тhought. Pragmatic Вookshelf, 20 1 2.
•
S 1ютrs , WILLIAM Е. The Linux Command Line: А Complete lntroduction. San Francisco,
СА: No Starch Press , 20 1 2 .
•
S w E I G ART А1 . Automate the Boring Stuff with Python: Practica/ Programming for Total
Beginners. San Francisco, СА: No Starch Pгess, 20 1 5.
,
.
Глава
2
Загрузка и системные д е м оны
" Загрузка" (booti ng) - это стандартн ы й терми н , означающий запус к компьютера. Он
представляет собой сокращенную форму слова "самозагрузка" (bootstrapping) , которое
подразум евает, что ком пьютер должен " привести себя в рабочее состоян и е с помощью
собствен н ых программ начальной загрузки (bootstraps) " .
Процесс загрузки состоит из н ескольких задач , определенных в ш и роком смысле.
•
Поиск, ввод в память и запуск кода начальной загрузки.
•
Поиск, ввод в память и запус к ядра операционной систем ы .
•
Активирование сценариев запуска и системных демонов.
•
П оддержа н и е порядка управл е н и е переходам и систе м ы из одного состо я н и я
в другое .
Действи я , указа н н ые в последнем пункте , продолжаются до тех пор, пока система
остается в рабочем состоя н и и , поэтому грани ца между загрузкой и нормальной работой
по своей сути нем ного размыта.
2 . 1 . ОБЗОР ПРОЦЕССА ЗАГРУЗКИ
П роцедуры запуска в последн ие годы с ил ьно измен ились. Появление современ н ых
B I O S с поддержкой U E F I ( U nified Ext ensiЫe Firmware l nterface - унифицированн ый
и нтерфейс рас ш иряемой прош и в ки ) упростило ран н и е этапы загрузки , по край н е й
м е р е с кон цептуальной точк и зрения. На более поздн их этапах больш инство дистрибу-
Часть 1. Основы администрирования
70
тивов Linux теперь испол ьзуют демон систе м ного менеджера под название м sys temd
вм есто тради цион ного де мона U N IX init. Пом и мо всего прочего, менеджер systemd
упрощает процесс загрузки путе м добавления управл е н и я зависимостя м и , поддержки
одноврем е н н ы х процессов запуска и ком плексного подхода к протокол и рованию.
Управл е н и е загрузкой также изме нялос ь по м ере того, как с исте м ы м и грировал и
в облако. Дрейф в сторон у виртуал изации, облач ных экзем пляров и контейнеризации
уме н ьш ил потребность в том , чтобы адм и нистраторы касались физического оборудова­
ния. Вместо этого у нас теперь есть управление изображе н и я м и , интерфе йсы A P I и па­
нел и управления.
Во врем я н ачал ьной загрузки ядро загружается в память и нач и н ает выполн яться.
П р и этом выпол н яется множество задач и н и циал изации , и затем с истема становится
доступной для пол ьзователей. Общий обзор этого процесса показан на рис. 2 . 1 .
Загрузить ядро
Создать структуры
данных ядра
Загрузить BIOS/UEFI
из NVRAM
Определить, какое
ядро загрузить
Запустить init/
systemd как PID 1
Собрать сведения
об аппаратуре
Загрузить загрузчик
(например, GRUB)
Выполнить
сценарии запуска
Выбрать устройство для
запуска (диск, сеть, ...)
Идентифицировать
системный раздел EFI
Запустить систему
Включить
Рис. 2. 1. Процессы загрузки Unux и Unix
Адм и н истратор ы не и м е ют средств дл я прямого интеракти вного управления боль­
шинством действий, необходи мых для загрузки систе м ы . Вместо этого адм инистраторы
могут изменять конфигурации загрузч иков, редактируя файлы конфи гурации для сцена­
риев запуска системы или изменяя аргументы , которые загрузч ик передает ядру.
Прежде ч е м система будет пол ностью загруже на, должны быть проверен ы и смон­
тирова н ы файловые систе м ы и запуще н ы систе м н ые де мон ы . Эти м и п роцедура м и
управляет набор сценариев оболоч ки ( и ногда называе м ы х " с це нария м и ini t " ) л ибо
файл ы , которые запус каются последовател ьно с помощью де мона i n i t ил и анал и ­
зируются м е н еджером sys temd. Точная ком поновка сценариев запус ка и способ и х
выпол н е н и я зависит от операционной систе м ы . Подробн ости изложе н ы в этой главе
ниже.
2.2. СИСТЕМНЫЕ ПРОШИВКИ
При вкл юче н и и ком п ьютера процессор вы пол н яет загрузоч н ы й код, хранящи йся
в постоян ном запоминающем устройстве . В виртуал ьных системах это постоян ное запо­
м и нающее устройство может быть виртуал ьн ы м , но концепция остается прежней.
глава 2. загрузка и системные демоны
71
Пр ош и вка с исте м ы , как правило, знает обо всех устрой ствах , которы е подкл ю­
чен ы к м атеринской плате , таких как контроллеры SATA, сетевые интерфейсы , U S В­
контроллеры и датч ики для п итания и тем пературы 1 • Поми мо возможности аппаратной
настройки эти х устройств, прошивка позволяет вам либо сообщить о н и х операционной
системе, либо отключить и скрыть их.
На физическом ( в отл и чи е от в иртуального) оборудован и и бол ь ш и н ство прош и ­
вок п редлагает пол ьзовател ьски й и н терфейс. Те м н е менее оно, как правило, сл и ш ­
ком п ростое и неудобное. Для работы с н и м н еобходимо и м еть доступ к ком пьютеру
и консол и , а также сразу же нажать на конкретную клавишу после включен и я систе м ы .
Ксожалению, "золотой ключик" у каждого производителя свой; проверьте , сможете ли
вы разобраться в загадочной строке инструкций в тот момент, когда с истема включ ится
впервые2• Если не с можете , попробуйте клави ш и < Delet e > , < Ctrl > , < F6 > , < F8 > , < F l O >
или < F l 1 > . Для увеличения ш ансов на успех косн итесь кл ав и ш и несколько раз, зате м
удерживайте ее нажатой.
Во врем я обычной начальной загрузки система прошивки проверяет аппаратное обе­
спечение и диски, запускает простой набор проверок работоспособн ости , а затем ищет
следующ и й этап кода начал ьной загрузки. Пользовательский интерфейс прошивки по­
зволяет н азначить загрузоч ное устройство, как правило, путем определения приоритетов
списка доступных параметров (например, " попробуйте загрузить с DVD-привода, затем
с U S В -диска, а затем с жесткого диска " ) .
В большинстве случаев системные диски входят в список вторичн ых приоритетов. Для
загрузки с определенного диска необходимо смонтировать его как диск с самы м высоким
приоритетом и убедиться, что в качестве загрузочного носителя включен " жесткий диск" .
BIOS ил и U E F I
В прошлом обычная про ш ивка для персонального ком пьютера назы валась B I O S
( Basic l nput/Output System) . Однако з а последнее десятилетие тер м и н B I O S был вытес­
нен более формал изова н н ы м и современ н ы м стандартом - U E F I . Часто можно встре­
тить тер м и н " U EF I B I O S " , но для ясности в этой главе мы зарезервируем термин B IOS
дл я устаревшего стандарта. Бол ьш инство систе м , реализующих U E F I , могут вернуться
к устаревшей реализации B IOS, если операционная с истема, которую они загружают, н е
поддерживает U E F I .
U E F I - это текущая верси я предыдущего стандарта E F I . Ссьmк и на и м я E F I сохра­
няются в некоторых старых докуме нтах и даже в н е которых стандартн ы х терминах, та­
ких как "систе м н ы й раздел E F I " . Во всех, кроме самых очевидных ситуаци й , эти терми­
н ы можно рассм атривать как эквивалентные.
В наши дни поддержка UEFI довольно тип ич н а для новых персональных комп ью­
теров, но в м ире существует очен ь м ного с истем BIOS. Более того, в иртуал ьн ы е среды
часто используют B I O S в качестве основного механизма загрузки, поэтому м и р B I O S
е щ е не находится под угрозой исчезновения.
Поскольку м ы предпочли бы и гнорировать BIOS и говорить только об UEFI, вполне
вероятно, что вы столкнетесь с обоими типами систем еще в течен и е довольно долгого
вре м е н и . U E F I также и нтегрирует в себя н екоторые функции B I O S , поэтому рабоч ие
знания BIOS могут быть весьма полезн ы для расшифровки документаци и U E F I .
1 Виртуальные системы и митируют, что имеют такой ж е набор устройств.
2 Возможно, вам будет полезно временно отключить функции управления п итанием монитора.
Часть 1. Основы администрирования
72
Уста ревший интерфейс BIOS
Традицион н ы й B IOS предполагает, что загрузочное устройство начинается с записи
(сектора) , называемой M B R (Master Boot Record). MBR содержит первич ный загрузчи к
( " bootЬ\ock") и простую табли цу разделов диска. Объем свободного места для загрузчи ­
к а настол ько мал ( менее 5 1 2 байт) , что он не может вы пол н ять ничего, кроме загрузки
и запуска вторичного загрузчика.
Из-за ограниченности размера ни загрузочный сектор, ни B I O S не могут обрабаты ­
вать записи любой стандартной файловой системы, поэтому вторичный загрузчик должен
храниться там , где е го легко найти. В одном типичном сценарии загрузочн ы й сектор счи­
тывает информацию о разбиении диска из M B R и идентифицирует раздел диска, поме­
ченный как "активны й " . Затем он считывает и выполняет вторичный загрузчик с самого
начала этого раздела. Эта схема называется загрузочной записью тома (volume Ьооt record).
11) Разб и е н и е диска
-
ЭТО способ разделе н и я физич еского диска. Детал и С М . В разде­
ле 20 . 5 .
В качестве альтернати вы вторич н ы й загрузч ик может находитьс я в " мертвой зоне " ,
которая расположена м ежду M B R и н ачалом первого раздела диска. П о историческим
причинам первый раздел не начи нается до 64-го сектора диска, поэтому эта зона обыч ­
но содержит м и ни мум 32 Кбайт памяти : все еще не м ного, но достаточно для хране­
ния драйвера файловой систе м ы . Эта схе ма хранения обычно используется загрузчиком
G RU B (см . раздел 2.4).
Для успещной загрузки все компоненты загрузоч ной цепочки должны быть правиль­
но установл е н ы и совместим ы друг с другом . Загрузочн ы й сектор M B R н ичего не знает
об операционной системе, но, поскол ьку он предполагает определ е нное местоположе ­
ние для второго этапа, может быть установлено несколько версий. Вторич н ы й загруз­
чик, как правило, хорошо ос ведомлен об операционн ы х системах и файловых системах
(он может поддерживать нес кол ько из н их) и обычно и м еет собстве н н ые параметры
конфи гурации.
UEFI
Спецификация U E F I включает в себя современную схему разделения диска, извест­
ную как G PT (табли ца разделов G U I D, где G U I D (global\y unique identifier) обознача­
ет " глобал ьно уникальный идентификатор" ) . U EF I также понимает файловую систему
FAT ( File Allocation ТаЬ\е), простую, но функциональную схему, впервые примене нную
в MS DOS. Эти функции объединяются для определения концепции системного раздела
E F I ( ES P - E F I System Partition ) . Во вре мя загрузки м и кропрограмма обращается к та­
блице разделов G РТ для идентификации E S P. Затем она считывает н астроен ное целевое
приложение непосредственно из файла в E S P и выпол няет е го.
W Дополнительную и нформаци ю о разделах G PT см. в разделе 20.б.
Поскольку E S P представляет собой общую файловую систему FАТ, ее можно смон ­
тировать, проч итать, записать и поддерживать в л юбой операцион ной системе. Н и какие
с крытые загрузочные се ктора на диске не требуются . 3
1 П о п равде говор я , для обле гче н и я вза и м одействия с систе м а м и B I OS с п е ц и ф и кация U E F I
п редусматри вает М В R-совмести мую зап ись в начале каждого диска . Систе м ы B I OS н е могут
видеть пол н ую табл и цу разделов в стиле G РТ, но о н и , по край ней мере, распознают диск как
отфор матирова н н ы й . Будьте осторож н ы , не запускайте оп ределе н н ые адм и н и страт и в н ы е
инструменты для M B R на дисках G P'I Он и могут неправильно и нтерпретировать структуру диска.
Глава 2. Загрузка и системные демоны
73
Фактически н и какой загрузчи к вообще не требуется. Целью загрузки U EFI может
быть ядро U N IX или Linux, которое настроено дл я прямой загрузки U EFI , что приводит
к загрузке без загрузчи ка. На практике, однако, большинство систем по-прежнему ис­
пользуют загрузчик, отчасти потому, что он упрощает поддержку совместимости с уста­
ревш и м и B IOS.
И нтерфе йс U E F I сохран я ет имя пути для загрузки из ESP в качестве параметра
конфигураци и . Если этот параметр не зада н , испол ьзуется стандартн ы й п уть, в со­
врем е н н ы х системах lntel обы ч н о это п уть /efi /boot/bootx 6 4 . ef i . Более типич­
ный путь в с исте м е с заданной кон ф и гурац и е й (для Ubuntu и загрузчика G RU B ) / e f i / ubun tu / grubx 6 4 . efi . Другие дистрибутивы п р идерживаются аналогичного
соглаше н и я .
И нтерфейс U E F I определяет стандартные и нтерфейсы API для доступа к аппарат­
н ы м средствам с исте м ы . В этом отнош е н и и он представляет собой нечто вроде м и ­
н и атюрной операционной систе м ы . О н даже обеспе чивает н ал и ч и е допол нительных
драйверов устройств на уровне UEFI, которые записываются на языке, н е зависящем
от процессора, и сохраняются в ESP. Операционные систе м ы могут испол ьзовать интер­
фейс U E F I или напрямую управлять оборудованием.
П ос кольку U E F I и меет формальный и нтерфейс API , переменные UEFI можно про­
верять и изме нять ( включая зап ис и загрузочного меню) уже в загруженной с истеме.
Например, команда efibootmgr -v показывает следующую с водку конфигурации за­
грузки:
$ efiЬootmgr -v
BootCurrent : 0 0 0 4
B o o t O r de r : 0 0 0 0 , 0 0 0 1 , 0 0 0 2 , 0 0 0 4 , 0 0 0 3
B o o t O O O O * E F I DVD / CDROM P c i Root ( O x 0 ) / Pc i ( O x l f , O x 2 ) / S a t a ( l , 0 , 0 )
B o o t O O O l * E F I H a r d D r i v e P c i Ro o t ( O x 0 ) / P c i ( O x l f , O x 2 ) / S a t a ( 0 , 0 , 0 )
B o ot 0 0 0 2 * E F I N e t wo r k P c i Ro o t ( O x 0 ) / P ci ( O x 5 , 0 x 0 ) /МAC ( 0 0 l c 4 2 fb 5 ba f , 0 )
В о оt О О О З * E F I I nt e rn a l S he l l Memo r yMapp ed ( l l , O x 7 e d 5 d 0 0 0 , 0 x 7 f 0 dc f f f ) /
FvF i l e ( c 5 7 ad б b7 - 0 5 1 5 - 4 0 a 8 - 9 d2 1 - 5 5 1 6 5 2 8 5 4 e 3 7 )
B o o t 0 0 0 4 * ubun t u H D ( l , G PT , 0 2 0 c 8 d 3 e - f d 8 c - 4 8 8 0 - 9b 6 1 e f 4 c f f c 3 d7 6 c , O x 8 0 0 , 0 x l 0 0 0 0 0 ) / Fi l e ( \ E F I \ubun t u \ s h imx 6 4 . e f i
Команда efibootmgr позволяет измен ить порядок загрузки , в ыбрать следующ и й
н астроен н ы й параметр загрузки или даже создать и уничтожить загрузочные запи с и .
Например, установить порядок загрузки так , чтобы сначала обращаться к с исте мному
диску, а потом - к сети , и гнорируя другие парам етры загрузки , можно с помощью ко­
манды
$ sudo efibootmgr - о 0 0 0 4 , 0 0 0 2
Здесь м ы указываем параметры Boot 0 0 0 4 и Boot 0 0 0 2 из выведенных в ы ш е дан ных.
Возможность изменять конфигурацию UEFI из пользовательского п ростран ства оз­
начает, что и нформация о конфигурации прошивки может как читаться , так и записы­
ваться - это и благословение, и проклятие. В системах, разрешающих доступ на запись
по умолчанию ( как правило, с помощью менеджера systemd) , команды rm -rf / мо­
жет быть достаточно, чтобы навсегда уничтожить систему на уровне прошивки; в допол­
нение к удалению файлов команда rm также удаляет переменные и другую информацию
U E F I , доступ ную через / sys4• Не п ытайтесь повторить это дома!
4Для получения дополнительной и нформации см. g o o . g 1 / QMS i SG (ссьmка на статью Phoroпix) .
Часть l. Основы администрирования
74
2.3. ЗАГРУЗЧИКИ
Большинство процедур начальной загрузки вкл ючают в себя выпол нение загрузчика,
к ото ры й отл ичается от кода B IO S/ U E FI и ядра операцион ной систе м ы . Он также отде­
лен от начал ьного загрузочного сектора в B I O S , если вы считаете этапы.
Основное задание загрузч и ка
определить и загрузить соответствующее ядро опера­
ционной с исте м ы . Большинство загрузчи ков также могут предоставлять пол ьзовател ь­
ский и н терф е й с загрузки , которы й позволяет выбирать, какое из нескольких возмож­
н ых ядер или операционн ых систем вызвать.
Другая задача загрузчи ка - это маршал и н г (marshaling) аргум ентов конфигураци и
дл я ядра. Ядро н е и меет командной строки к а к таковой, но обработка е го параметров
зап ус ка может показаться довол ьно похожей на работу с оболочкой . Например, аргу­
мент s ingle или -s обычно указы вает ядру войти в однопол ьзовател ьский режим , а не
выпол н ять нормал ьны й п роцесс загрузки.
Такие параметры могут быть жестко при вязаны к конфи гурации загрузчи ка, если вы
хотите , чтобы они испол ьзовались при каждой загрузке , или предоставляться " на лету"
через п ол ьзо вател ьс кий и н терфе й с загрузчика.
В следующих нескольких разделах м ы обсудим G R U B (ос новной загрузчи к операци­
о н н о й с исте м ы Linux) и загрузч и к и , используемые с системой Free B S D .
-
2 .4. G RU B: У НИВЕРСАЛЬНЫЙ ЗАГРУЗЧИК
G RU B ( G Rand U nified Boot) , разработанный G N U Project , я вляется загруз­
ч иком по умолчан и ю для больши нства дистрибутивов Li nux. Л иния G R U B
и м е ет два основных направл е н и я : ори гинал ь н ы й G R U В , теперь н азывае ­
м ы й G RU B Legacy, и новый G RU B 2 , который я вляется текущи м стандар­
том. Убедитесь, что вы знаете , с каким вариантом загрузчи ка G R U B вы име­
ете дело, поскол ьку эти две верс и и совершенно разные.
G RU B 2 был загрузоч н ы м менеджером по умолчан и ю для систе м ы Ubuntu, нач и ­
ная с верси и 9. 1 О, и недавно стал загрузоч н ы м менеджером п о умолчан ию дл я систе м ы
R H E L 7 . Все наш и примеры дистрибутивов Linux испол ьзуют его по умолчан ию. В этой
кн и ге м ы обсуЖДаем только G RU B 2 и называем е го просто G RU B.
У с исте м ы Fre e B S D есть собстве н н ы й загрузчи к (более подробно с м . раздел 2 . 5 ) .
Однако G R U B отл ичн о с п ра вл яется с загрузкой Free B S D . Это может оказаться удоб­
н ы м , если вы план ируете загружать несколько операционн ых систем на одном компью­
тере. В п роти в н ом случае загрузч и ка Free B S D более чем достаточно.
Кон ф игураци я G R U B
G RU B позвол яет указать такие параметры, как загрузочное ядро (указанное в каче­
стве записи меню G RUB) и режим работы для загрузки.
П оскол ьку эта информация о конфигураци и н еобходима во вре м я загрузки , можно
подумать, что она будет хран иться где-то в необычном месте , например в энергонеза­
виси мой с истем ной пам яти NVRA M или в секторах диска, зарезервированных для за­
грузчика. На самом деле G RU B понимает большинство используемых файловых с исте м
и обычно может самостоятел ьно найти корневую файловую систему. Это позволяет за­
грузчи ку G RU B читать с вою конфигураци ю из обыч ного текстового файла.
Глава 2. Загрузка и системные демоны
75
Конфигурационный файл называется gruЬ . cfg, и е го обычно хранят в каталоге /boot/
gruЬ ( /boot/gruЬ2 в системах Red Hat и CentOS) вместе с выбором других ресурсов и мо­
дулей кода, которые G RU В может потребовать для доступа во время загрузки. 5 Изменение
конфигурации загрузки - это простой вопрос об обновлении файла gruЬ . cfg.
Хотя можно создать файл grub . cfg самостоятельно, чаще всего е го проще гене­
р ировать с помощью утил иты grub-mkconfig, которая называется grub2 -mkconfig
в с истем ах Red H at и CentOS и update-gruЬ в системах Deblan и Ubuntu. Фактич ески
большинство дистрибути вов предполагают, что файл gruЬ . cfg может быть регенериро­
ван по желанию, и они делают это автоматически после обновлений. Если вы не пред­
примете н и каких шагов, чтобы предотвратить это, ваш файл grub . cfg будет испорчен.
Как обыч но в системе Linux, дистрибутивы задают конфигураци ю утилиты grub­
mkconfig различными способами . Чаще всего конфигураци я задается в каталоге /etc/
default/gruЬ в виде присваивания переменных sh. В табл . 2. 1 показаны н екоторые из
часто изменяемых опций.
Табли ца 2 . 1 . Общие параметры конфиrурации GRUB в файле / etc/ defaul t/ gruЬ
Обозначение переменной оболочки
Содержимое или функция
GRUB BACKGROUN D
Фоновое изображение•
GRUB _ CMDL I N E _ L I NUX
Параметры ядра для добавления в записи меню для Li nux6
GRU B D E FAULT
Номер или название элемента меню по умолчанию
GRUB D I SABLE RECOVERY
Предотвращает создание записей режима восстановления
GRUB_ PRELOAD_MODULES
Список модулей GRUB, загружаемых как можно раньше
GRUB T I МEOUT
Секунды для отображения меню загрузки перед автозагрузкой
• Фоновое изображение должно иметь формат . pnq, . tqa, • jpq или . jpeq.
68 табл. 2.3 в разделе 3.4 перечислены некоторые из доступных опци й .
Ш Подробнее о режимах работы см . раздел 2.7.
После редактирован ия каталога /etc/defau l t /grub запустите утилиты update ­
gruЬ ил и gruЬ2 -mkconfig, чтобы перевести вашу конфигурацию в правил ьн ы й файл
gruЬ . cfg. В рамках процесса построения конфигурац и и эти команды п роверяют загру­
зочные ядра с исте м ы , поэтому он и могут быть полезны для запуска после внесения из­
менений ядра, даже если вы явно н е изменили конфигураци ю G RU B .
Возможно, вам потребуется отредактировать файл /etc/gruЬ . d/ 4 0_cus tom, чтобы
и зм е н ить порядок, в котором ядра указаны в меню загрузки (например, после созда­
н ия настраивае мого ядра) , установить пароль для загрузки или изменить имена пунктов
м е н ю загрузки. Как обычно, после внесения изменений запустите утилиты update ­
gruЬ или gruЬ2 -mkconfig.
Например, вот как в ыглядит файл 4 0_cus tom, которы й вызывает пользовательское
ядро в системе Ubuntu.
' Есл и вы з накомы с соглаш ен и я м и файловой системы U N IX (см . главу 5 ) , то можете з адаться
вопросом, почему каталог /boot/qruЬ не н а з ван как-то более стандартно, например /var/ lib/
qruЬ и л и /usr/ local /etc/gruЬ. Причина в том , что драй веры файловой с и стемы, используемые
во время загрузки , несколько у проще н ы . Загрузч ики не могут обрабатывать доп ол н ительные
функци и , такие как точки монтирова ния , когда они обходят файловую с и стему. Все в каталоге
/boot должно быть простым файлом или каталогом .
Часть 1. Основы администрирования
76
# ! /Ь i n / s h
ехес tail -n +3 $ 0
Jt T h i s f i l e p r ovi de s a n e a s y way t o add cus t om menu e n t r i e s . Ju s t t ype
Jt t h e menu e n t r i e s you want t o a d d a f t e r t h i s comme n t . В е c a r e ful n o t to
Jt change t h e ' ех е с t a i l ' line above .
menu e n t r y ' М у Awe s ome K e r ne l '
s e t r o o t = ' ( hd O , msdo s l ) '
/ a we s ome_k e r n e l r o o t = U U I D=XXX -XXX - XXX r o qu i e t
l i nux
i n i t rd
/ i n i t rd . img- a we s ome_k e r n e l
W Для получ е н и я доп олнител ьной и н формации о монтирова н и и файловых систем с м .
раздел 5 . 1 .
В этом примере G R U B загружает ядро из каталога /awesome_kerne l . П ути к ядру
я вл яются относител ьн ы м и и связа н ы с загрузоч н ы м разделом котор ы й исторически
монтировался как /boot, но с поя влением U E F I теперь, с корее все го, он я вляется де­
монтирова н н ы м систе м н ы м разделом EFI. Для проверки вашего диска и определения
состоян ия загрузочного раздела испол ьзуйте команды gpart show и mount .
К ома ндная строка GRUB
G RU B поддержи вает и нтерфейс командной строки для редактирования записей
в файле конфигурац ии " на лету" во время загрузки. Ч тобы войти в режи м командной
строки , введите команду с на экране загрузки G RU B.
В командной строке можно загружать операцион н ые с исте м ы , которые не указаны
в файле grub . cfg, отображать системную информаци ю и выпол н ять рудиментарное
тестирован ие файловой с исте м ы . Все , что можно сделать через файл grub . cfg, также
можно выполн ить с помощью командной строки.
Н ажм ите клавишу <ТаЬ> , чтобы просмотреть список возможных команд. Некоторые
наиболее полезные команды показаны в табл. 2 . 2 .
Таблица 2 . 2 . Команды GRUB
Команда
Функци•
boot
Загружает систему из указанного образа ядра
Получает интерактивную помощь для команды
Загружает ядро Linux
Перезагружает систему
Поиск устройств по файлу, метке файловой системы или UUID
П роверка поддержки USB
help
l inux
reЬoot
search
usb
Для получения подробной информации о G RU B и параметрах командной строки об­
ратитесь к офи циал ьному руководству по адресу gnu . o rg / s o f t w a r e / g ru Ь / ma n u a l .
Параметры ядра Li nux
П араметры запуска ядра обычно изменяют знач е н и я параметров ядра, инструкт и ­
руют ядро проверять определ е н н ы е устройства, указы вать п уть к процессу ini t ил и
systemd л ибо назначать определенное корневое устройство. В табл . 2 . 3 приведено не­
сколько примеров.
Глава 2. Загрузка и системные демоны
77
Таблица 2 . 3 . Примеры параметров времени загр узки ядра
Опция
·
Значение
debug
Включает отладку ядра
init=/Ьin/bash
Запускает только оболочку bash; полезна для аварийно го восстановления
r o ot = / dev / f o o
Инструктирует ядро использовать /dev/ foo в качестве корневого устройства
s in g l e
Загрузка в однопольэовательском режиме
Если параметры ядра задаются во врем я загрузки, они не я вляются постоя н н ы м и .
Для того чтобы сделать изменение постоян н ы м при перезагрузке, отредактируйте соот­
ветствующую строку ядра в файле /etc/gruЬ . d/ 4 0-custom или /etc/defaults/gruЬ
(переменная с именем GRUB CMD L I NE L I NUX) .
В ядро Linux постоян но добавляются заплатки безопасности , исправления ош ибок
и новые функции. Однако в отл и ч ие от других пакетов программного обеспеч е н ия но­
вые верс и и ядра обычно не заменяют старые. В место этого новые ядра устанавливаются
наряду с предыдущи м и версиями , так что в случае возникновения проблем можно вер­
нуться к старом у ядру.
Это соглашение помогает адми н истраторам отказаться от обновления, есл и заплатка
ядра разрушает их с истему, хотя это также означает, что загрузочное меню и меет тенден­
цию сохранять старые верс и и ядра. Попробуйте выбрать другое ядро, если ваша система
н е будет загружаться после обновления.
Подробнее о параметрах ядра см. в главе 1 1 .
_
_
2.5. П РОЦЕСС ЗАГРУЗКИ FREEBSD
Система загрузки FreeBSD во многом похожа на G RU B , поскольку загрузчик
конечной стадии ( под и менем loader) использует файл конфигураци и на ос­
нове файловой систе м ы , поддержи вает меню и предлагает интерактивн ы й
режим командной строки. Загрузчик loader - это последнее пересечение
вариантов загрузки B I OS и UEFI.
Вариант BIOS: boo tO
Как и в случае с и нтерфейсом G RU B , полн ая среда загрузчика loader сли ш ком ве­
л и ка для размещения в загрузочном секторе M B R, поэтому в B IOS постепенно загружа­
ется и запус кается цепочка более сложных предварительных загрузчиков.
Интерфейс G R U B объединяет все эти ком поненты под общим названием " G R U B" ,
но в с истеме FreeB S D ранние загрузчики я вляются частью отдельной систем ы под на­
зва н и е м bootO , которая используется только в системах B IOS. Система bootO и м еет
свои собствен н ые опци и , главны м образом потому, что она хранит более поздние этапы
цепочки загрузки в загрузочной записи тома (см. раздел " Устаревший и нтерфейс B IOS"
в разделе 2 . 2 ) , а не перед первым дисковым разделом.
П о этой причине для загрузочной записи M B R нужен указатель н а раздел, которы й
необходимо испол ьзовать дл я продолжения процесса загрузки. Как правило, все это ав­
том атически настраивается как часть процесса установки FreeBSD, но если вам когда­
л ибо понадобится н астроить конфигурацию, это можно сделать с помощью команды
bootOcfg.
часть 1. Основы администрирования
78
Вариант UEFI
О перацион ная система Free B S D , использующая и нтерфейс U E F I , создает с истем ­
н ы й раздел E F I и устанавливает там заrрузоч н ы й код в файле /Ьооt/Ьооtхб4 . ef"i. 6 Это
путь по умолчани ю , которы й проверяют систе м ы U E F I во врем я заrрузки (по крайней
мере на совре м е н н ых платформах персональных ком пьютеров) , поэтому никакой кон­
фиrураци и прошивки не требуется , за исключением правил ьно установленных приори­
тетов заrрузки устройств.
По умолчан и ю с истема Free B S D н е сохраняет смонтирован н ы м с исте м н ы й раздел
E F I после заrрузки. Таблицу разделов можно идентифицировать с помощью команды
gpart.
$ gpart shov
=>
40
40
1640
1 2 7 92 63 0 4
1 3 4 2 1 7 68 7
134217648
1600
127924664
62 9 1 3 8 3
1
adaO
1
2
3
GPT
( 64G)
efi
( 800К)
f r e eb s d - u f s ( 6 1 G )
f r e e b s d - swap ( 3 . 0 G )
- free
( 5 128)
-
Хотя существует возможность подключить систе м н ы й раздел ESP, чтобы узнать, что
в нем содержится ( используя команду mount -t msdo s ) , вся файловая система - это
всеrо л и ш ь копия образа, найден ного в файле /Ьoot/bootl . ef"if"at на корневом дис­
ке. Внутри нет деталей , которые пользовател ь мог бы измен ить.
W Для п олуч е н и я допол н и тел ьной информации о монти рован и и файловых систе м с м .
раздел 5 . 1 .
Если раздел ESP поврежден или удален , ero можно повторно создать, настрои в раз­
дел с помощью команды gpart, а затем скопировав образ файловой систе м ы с помо­
щью команды dd:
$ sudo dd if=/boot/bootl . efifat of=/dev/ adaOpl
Как только начальн ы й заrрузчик первого этапа U E F I находит раздел типа f re e b s d ­
u f s 7 , он заrружает UЕFl-версию проrраммы loader из файла /Ьoot/ loader . ef"i . С это­
го момента загрузка в ыполняется точно так же , как под управлением B I O S : заrрузчи к
loader определяет, какое ядро следует заrрузить, устанавливает параметры ядра и т.д.
Конфигурация загрузчика
Заrрузчи к loader на самом деле является средой сценариев на языке Forth.8 Внутри
каталога /boot хран ится код на языке Forth, управляющий операциями заrрузчика, но
он вполне самодостаточн ы й - вам не нужно изучать Forth.
Чтобы пол уч ить значения переменных конфиrураци и , сценарии на языке Forth счи­
тывают файл /boot/loader . conf", поэтому задавать их следует именно здесь. Н е путай­
те этот файл с файлом /boot/def"aults / l oader . conf", которы й содержит настройки
по умолчанию и не предназначен для изменения. К счастью, присваиван ия пере м е н н ых
6 Н е пуrайте каталог /boot в с истемном разделе E F I с каталогом /boot в корневой файловой
систем е Fre e B S D . Они отделен ы друг от друга и служат разл и ч н ы м uеля м , хотя , конечно, оба
связаны с начальной загрузкой .
7 Н ач и н ая с верс и и Free B S D 1 0 . 1 , в качест ве корне вого раздела в с и ст е м е U E F J можно
использовать Z FS .
"Э
то замечательны й и интересны й ф акт, имеющи й значение лишь для люде й , интересующихся историей
языков программирования.
Глава 2. Загрузка и системные демоны
79
в файле loader . conf с интаксически похожи на ста ндарт н ы е операци и присваивания
в оболочке sh.
С правоч н ы е mа n -страницы о загрузчи ке loader и файле loader . aonf содержат
и н формацию обо всех параметрах загрузч и ка и перем е н н ы х к о нфигур а ц и и которые
их контрол и руют. Не которые из наиболее и нтересных вариа нтов защищают меню за­
грузки паролем , м е н я ют экран заставки , отображаем ы й п р и загрузке , и передают па­
раметры ядра.
,
Кома нды за грузч ика loader
Загрузчи к понимает разл и ч н ые и нтерактивные команды. Напр и мер, чтоб ы найти
и загрузить альтернативное ядро, необходимо испол ьзо вать п оследовательность следу­
ющих команд:
Т ур е ' ? ' f o r а l i s t of c ommand s ,
ок ls
1
d . s nap
d dev
' help '
for more de t a i l e d h e l p .
d r e s cu e
1 h ome
ок unload
ОК load /boot/kernel/ kernel . old
/ b o o t / ke rn e l / ke r ne l . o l d t e x t = O x f 8 f 8 9 8 d a t a= O x l 2 4
ОК boot
. . . Ь0 7 7 )
Здесь мы в ы вели содержи м ое корневой файловой с исте м ы (по умолчани ю ) , в ы ­
грузил и ядро по умолчани ю {/boot/ kerne l / kerne l ) , за г руз ил и более старое ядро
{/boot/kernel/kernel . old) и продолжили процесс загрузки .
Для получе н ия полной документации о доступных командах выпол ните команду man
loader.
2.6. Д ЕМОНЫ УПРАВЛЕНИЯ СИСТЕМОЙ
П осле загрузки и заверш е н ия процесса и н и циализации ядро создает спон та н н ы е
процессы в пользовательском п ространстве. О н и н аз ы ва ю тся спонтанным и , п отом у что
ядро запус кает их автономно - при нормал ьном ход е событий новые процессы созда­
ются тол ько по воле существующих процессов.
Большинство спонтанных процессов действительно я вляютс я частью реализации ядра.
Они не обязательно соответствуют программам в файл о вой системе. Они не настраивают­
ся и не требуют внимания со стороны системного администратора. Их можно распознать
в списках ps (см. раздел 4.3) по низким значениям параметра PI D и скобкам вокруг их и м ен
(например, [ pa gedaemon ] в системе Free BS D или [ kdump ] в системе Linux).
И с кл ю ч е н и е м из этого ш аблона я вляется демон у п равл е н и я си стемой. Он и м е е т
идентификатор процесса, рав н ы й 1 , и обычно работает под и м ен е м ini t. Систем а дает
демону ini t несколько специальных привилегий , но по большей части это п росто про­
грам ма на уровне пользователя , как любой другой демон .
"
"
Часть 1. Основы администрирования
80
О бязанности демона ini t
Демон ini t и меет несколько фун кций , но его главной целью я вляется обеспечение
того, чтобы система запускала правильные комплекты служб и демонов в л юбой момент
времени.
Для достижен ия этой цели ini t поддерживает понятие режима, в котором с истема
должна работать. Н иже перечислены некоторые общепринятые режи м ы9•
•
Однопользовательский режи м , в котором монтируется тол ько м и н и м ал ьн ы й на­
бор файловых систе м , н и одна из служб не запущена, а на консоли запущена кор­
невая оболоч ка.
•
М ногопол ьзовательский режи м , в котором монтируются все обыч ные файловые
с исте м ы и запуще н ы все настроенные сетевые службы , а также око н ная система
и графический менедЖер входа в консоль.
•
Режим сервера, аналогичный режиму м ногопользовательского режи ма, но без ис­
пользо вания графического пользовательс кого интерфейса на консол и .
Кажды й режим с вязан с определенным комплектом систе м н ых служб, а демон и н и ­
циал изации запус кает или останавл ивает службы п о мере необходимости , чтобы при­
вести фактическое состоян и е с исте м ы в соответствие с текущим акти вным режи мом .
Режим ы могут также и меть связанные с н и м и контрол ьные задач и , которые запускают­
ся всякий раз, когда режим начинается или заканчивается.
Например, демон ini t обычно выполняет м ногие задач и , с вя занн ые с запуском ,
в качестве побоч ного эффекта перехода от начал ьной загрузки к м ногопользовательско­
му режиму. К н и м могут относиться следующие задачи .
•
Установка и м е н и ком пьютера.
•
Установка часового пояса.
•
П роверка дисков с помощью команды fsck.
•
Монтирование файловых систем .
•
Удаление старых файлов и з каталога / tJnp .
•
Н астрой ка сетевых и нтерфейсов.
•
Н астрой ка фил ьтров пакетов.
•
Запуск других демонов и сете вых служб.
У демона init очен ь мало встроенных знаний об этих задачах. Он просто запускает
набор команд или сценариев, которые были назначены для выполнения в этом кон крет­
ном контексте .
Реа л изации демона ini t
В настоящее время широко используются три совершенно разных стиля в процессах
системного управления.
•
Стиль init, принятый в системе System V U N IX компании АТ&Т, которы й м ы
называем "традиционн ы м стилем init" . Этот стиль был преобладающим в систе­
м ах Linux до поя вл е н ия менедЖера systemd.
'' Н е при н и йте эти и е н а или описан я режимов сли ш ком буквально ; это всего л и ш ь примеры
ма
м
и
общих ре жи м ов ра боты , которые больш и нство систем о п ределяют т а к ил и и н аче.
Глава 2. загрузка и системные демоны
81
•
Вариант i n i t, которы й происходит от с истем ы B S D UN IX и испол ьзуется
в больш и нстве В S D - с исте м , вкл ючая Free BSD, Ope n B S D и N et BS D . Он так же
проверен временем, как и стиль SysV ini t , и и меет столько же прав называть­
ся "традицион н ы м " , но для ясности мы называем ero " B S D init" . Этот вариант
довольно прост по сравнению с и н ициал изацией стиля SysV. Мы обсудим e ro от­
дельно в разделе 2 . 8 .
•
Относительно недавно у демона ini t появился конкурент - менеджер sys temd,
целью которого является полное решение всех пробл е м , связа н н ы х с демонами
и состоян и е м с истемы . Как следствие, менеджер sys temd захватил знач ительно
большую территорию, чем л юбая традиционная версия демона ini t. Это несколь­
ко противоречивая с итуация, о которой мы поrовори м н иже . Те м не м е н ее все
наши примеры дистрибутивов Linux теперь содержат менеджер systemd.
Хотя эти реали заци и являются преобладающ и м и в данн ы й м о м е н т, о н и дал е к и
о т того, чтобы б ыть еди н ствен н ы м варианто м . Например, в операционн о й систе м е
macOS компании Apple используется с истема и н ициализации с именем launchd. П ока
в системе UЬuntu не бьm реализован менеджер systemd, в ней испол ьзовался друrой со­
временный вариант демона ini t под названи е м U pstart.
В с истемах Linux теоретически можно заменить и нициализацию по умолча­
нию в зависимости от того, какой вариант вы предпочитаете . Но на прак­
тике демон ini t н астолько важен для работы с исте м ы , что м ногое до­
пол нительное програ м мное обеспечение может в ы йти из строя . Если вы
не желаете испол ьзовать менеджер sys temd, примите в качества стандарта
дистрибутив, которы й его не использует.
Традицион н ый стил ь ini t
В традиционном мире и н и ц иализации системные режим ы (например, однопол ъзо­
вательские или мноrополъзовательские) называются уровнями выполнения. Бол ьш инство
уровней выполнения обозначаются одной буквой или цифрой.
Традиционн ы й стиль init появился в начал е 80-х гг. Е го сторонники (т. е . против­
н ики применения менеджера sys temd) часто ссьmаются на принцип: " Не сломалось не чини " . Тем не менее традиционн ы й стиль ini t имеет ряд зам етных недостатков.
Начнем с тоrо, что традиционный демон init сам по себе не настолько силен, чтобы
справляться с потребностям и современных операционн ых систем. Бол ьш инство систе м ,
которые ero испол ьзуют, на самом деле имеют стандартную и фикс ированную конфигу­
рацию ini t, которая никогда не изменяется. Эта конфигурация ссылается на второй уро­
вень сценариев оболочки, которые выполняют фактическую работу по изменению уров­
ней выполнения и позволяют администраторам вносить изменения в конфигурацию.
Второй уровень сценариев поддерживает еще и третий уровен ь сценариев, связанных
с де моном и с истемой, которые привяза н ы к каталогам определенного уровня, указы­
вающ и м , какие службы должны работать и на каком уровне запуска. Все это нем ного
запутанно и неизящно.
Говоря кон кретно, эта с истем а не и меет общей модели зависимосте й между служ­
бам и , поэтому требуется, чтобы все запуски и демонстрации выполнялись в порядке ,
заданном адм и нистратором . Более поздн ие действия не могут выполняться до тех пор,
пока не будут закончены все предыдущие , поэтому выполнять и х параллел ьно невоз­
можно, и система тратит много времени, чтобы изменить состояние.
82
Часть 1. Основы администрирования
М енеджер sys temd п ротив остал ьного мира
Л и ш ь нем ногие пробл е м ы в области Linux обсуждал ись более горячо, чем переход
от традицион ного де мона init к менеджеру sys temd. По большей части , жалобы со­
средоточиваются на постоянно растущих масштабах систе м ы .
Менеджер sys temd осуществляет все фун кции i n i t , ранее реал и зова н н ые с помо­
щью хитроумных уловок и приемов, и формал изует их в еди ное целое, позволяя настра­
и вать, получать доступ и управлять службам и .
В качестве с исте м ы управлен и я пакетами менеджер sys temd определяет надежную
модель зависимосте й не тол ько среди служб, но и среди " целе й " . Этот терм и н испол ь­
зуется в контексте sys temd для описания режимов работы, которые в контексте тради­
цион ного демона init называл ись уровнями выполнения. Менеджер systemd не толь­
ко управляет п роцессам и параллельно, но также управляет сете в ы м и подкл ючениями
(networkd) , зап ися м и журнала ядра ( j ournald) и авторизацией (logind) .
П ротивники использования менеджера sys temd утверждают, что философия U N IX
закл ючается в том , чтобы систе м н ые ком поненты были небол ьш и м и , простым и и мо­
дульн ы м и . Говорят, что такой фундаментал ь н ы й ком понент, как ini t н е должен иметь
монолитного контроля над м ноги м и другим и подсистемами операцион ной систе м ы .
Менеджер systemd не тол ько порождает сложность, но и создает поте н циальные н е ­
достатк и в области безопасн ости и препятствует разграничению между платформой опе­
рац ион ной с исте м ы и служба м и , которые работают н а ее ос нове .
Ш Дополнител ьную информацию об уп равлени и пакетами см. в главе 6 .
Менеджер systemd также критикуют з а введен ие новых стандартов и обязанностей
в ядро Linux, качество кода, предполагаемую н е вос п р и и м ч и вость е го разработч и ков
к сообщениям об ошибках, дизайн его основных фун кций и неле пый вид. М ы не можем
справедли во реш ить эти проблемы в этой книге , но читатели могут ознакомиться с аргу­
ментами в разделе Arguments against systemd по адресу w i t ho u t - s ys t emd . o r g , на основ­
ном сайте противн и ков sys temd.
А ргументы против ini t
Архитектурн ы е возражен ия против менеджера sys temd, изложе н ные выше, я вл я ­
ются вполне разу м н ы м и . Он действител ьно имеет большинство тип и ч н ых недостатков
надстрое нного п рогра м много проекта.
Н а практике , однако, м ногие адми нистраторы оч е н ь л юбят испол ьзовать sys temd,
и мы относимся к этому лагерю. Оставьте на время полем ику и предоставьте менеджеру
systemd шанс завоевать ваше признание. Как только вы привы кнете к нему, вы, с корее
всего . оцен ите е го м ногочисле н н ые преимущества.
По крайней мере , имейте в виду, что традиционн ы й демон init, который вытесняет­
ся менеджером sys temd, не был идеальным. Помимо всего прочего, менеджер sys temd
просто устраняет нескол ько ненужных разл ичий между дистрибутивами Linux.
Дебаты действител ьно н е и м е ют значе н и я , потому что соре внован и е завершено.
Аргументы против испол ьзования sys temd потеряли силу, когда на него переключились
системы Red Hat , Deblan и Ubuntu. М ногие другие дистрибутивы Linux теперь принима­
ют systemd л ибо вольно, л ибо невольно.
Традиционн ы й де мон ini t по- прежнему и грает определенную роль, есл и дистрибу­
тив л ибо нацелен на небольшой размер и нсталляци и , либо н е нуждается в расшире н н ых
фун кциях управлен ия процессом sys temd. Также существует знач ительное количество
глава 2 . Загрузка и системные демоны
83
реван ш истов, которые презирают систему из принципа, поэтому н екоторые дистрибу­
тивы Li nux обязател ьно будут поддерживать тради цион ную и н ициал изацию в теч е н ие
неопределе н ного срока в качестве формы протеста.
Тем не менее м ы не считаем , что тради цио н н ы й демон ini t и меет будущее , чтобы
заслужить подробное обсуждение в этой книге . Для систе м ы Linux мы в основном огра­
ничиваемся менеджером systellld .
М ы также обсудим оче н ь простую систему инициализации, испол ьзуемую Free B S D ,
в разделе 2 . 8 .
2.7. МЕНЕДЖЕР SYSTEМD в ДЕТАЛЯХ
Конфигурация и управление систе м н ы м и службами - это область, в которой дис­
трибутивы Linux традиционно отличаются друг от друга. М е н еджер sys temd нацелен
на стандартизацию этого аспекта систе м ного адми нистрировани я , и в этой области он
достиг бол ьших успехов, чем л юбая предыдущая альтернатива.
Систе м н ы й м е неджер sys temd
это не отдельный демон , а набор п рограм м , де­
монов, библ иотек, технологий и ком понентов ядра. Как отмечается в сообще н и и , опу­
бл икованном в блоге , посвященном systemd на странице O p o i n t e r . de / Ь l og , полная
сборка проекта генерирует 69 разн ых двоичных файлов. Подумайте об этом как о конди­
терской , в которой вы обязаны съесть все конфеты .
Поскольку менеджер systemd с ил ьно зависит о т особенностей ядра Linux, это пред­
ложение предназначено тол ько дпя Linux. В ы не увидите е го в системе B S D ил и любом
другом варианте U N IX в течен ие следующих пяти лет.
-
М одул и и модульные файл ы
Сущность, которой управляет менеджер sys temd, называется модулем (unit) 10• Более
кон кретно, модулем может быть "служба, сокет, устройство, точка монтирования , точка
автоматического монтирования , файл или раздел подкачки, цель запуска, просматри ва­
емый файловый путь, таймер, управляемый systemd, часть ресурса управлен и я , группа
со:щанных извне процессов или портал в альтернативную вселенную" . 1 1 Хорошо, мы даже
захватили часть ал ьтернативной вселен ной, но она все еще занимает м ного территории.
Внутри менеджера systellld поведение каждого модуля определяется и настраи вается
модульным файлом. Например, в случае службы файл модуля указы вает м естоположе ­
ние исполняемого файла дпя демона, сообщает systemd, как запускать и останавли вать
службу, а также идентифицирует л юбые другие модули , от которых зависит служба.
Вскоре м ы рассмотри м синтаксис модульных файлов, а пока приведем простой при ­
мер и з систе м ы Ubuntu. Этот файл устройства rsync . service; он обрабатывает запус к
демона rsync, который отображает файловые систе м ы .
[ Uni t ]
De s c r i p t i on= f a s t rerno t e f i l e сор у p rograrn d a ernon
Condi t i on P a t h Ex i s t s = / e t c / r s yncd . c on f
[ S e rvi c e ]
ExecS t a r t = / u s r /bi n / r s ync - - d a ernon - - n o - d e t a c h
111 Н а жаргоне п рограммистов и х часто называют юн итами .
-
1 1 В осн овном , цитируется по mаn-стра н и це sys temd . uni t.
Примеч. ред.
часть 1. основы администрирования
84
[ I nstal l ]
W a n t e dB y=mul t i - u s e r . t a r g e t
Если вам показалось, что это напоминает файл в формате . ini, испол ьзуемом в сис­
темах M S - D O S , знач ит, вы хорошо понимаете почему к sys temd так плохо относятся.
Модульные файл ы могут находитьс я в нескол ьких местах. Основное место , где паке­
ты сохраняют свои модульные файл ы во время и нсталляции - / u s r / l iЬ / sys temd/
sys tem; в некоторых с истемах для этого испол ьзуется каталог / l ib / systemd/ sys tem.
Содержимое этого каталога сч итается ресурсом , поэтому вы не должн ы изменять е го.
Файлы локал ьных файлов и настройки могут выполняться в каталоге /etc / sys temd/
sys tem. В каталоге /run/ sys temd/system есть также каталог модулей, который я вл я ­
ется рабочей областью для переходных модулей.
М е неджер sys temd поддерживает телескопическое представление всех этих катало­
гов, поэтому они в значител ьной степени эквивалентн ы . Если возникает конфл икт, то
файл ы в каталоге /etc имеют наивысш и й приоритет.
W Для получения дополнительной информации о демоне rsync с м . раздел 1 7.4.
П о соглашению, модульные файлы именуются суффиксом , который зависит от ти па
настраиваемого устройства. Например, служебны е модули имеют суффикс . servi ce ,
а тай меры используют суффикс . timer. Внутри модул ьного файла н е которые разде­
л ы (например, [ U n i t ] ) относятся в общем случае ко всем типам м одул е й , но другие
(например, [ S e rv i c e ] ) могут отображаться тол ько в контексте определ е н н ого типа
устройства.
Команда sys temctl: упра вление менеджером sys temd
Команда sys temctl - это универсал ьная команда для изучен и я состоян ия менед­
жера sys temd и внесения изм е н е н и й в е го конфигурацию. Как и в случае с системой
G it и нескольки м и другим и слож н ы м и пакетами программ ного обеспече ния , первый
аргумент команды sys temctl обычно представляет собой подкоманду, которая задает
общую последовательность действий , а посл едующие аргументы я вл я ются специфиче­
с ки м и для этой кон кретной подкоманды. Подкоманды могут быть отдельн ы м и коман ­
дам и верхнего уровня , но для согласован ности и ясности они объедин е н ы в команду
systemctl.
W Для получения дополн ител ьной информации о системе Git см . раздел 7 . 8 .
Выпол не н и е команды sys temctl без каких-л ибо аргументов по умолчани ю вы­
зывает подкоманду l i s t-unit s , в которой отображаются все загружен н ые и активные
службы , сокеты, цел и , смонтированные диски и устройства. Для того чтобы показывать
только загружен н ые и активные службы, используйте кл юч - type
service:
=
$ systemctl lis t-uni ts - - type=service
UN I T
a c c o un t s - daemon . s e rv i c e
L OAD
l oa d e d
ACT I VE
a c t ive
SUB
runni n g
wpa_suppl i c a n t . s e rv i c e
l o aded
a c t ive
runn i n g
DESCRI P T I ON
Account s S e rv i c e
W PA supp l i c a n t
Также и ногда полезно видеть все инсталл ированные модульные файл ы , независимо
от того, акти вны они ил и нет:
$ sys temctl list-uni t-fi les - - type=service
UN I T F I L E
S TATE
c r o n . s e rv i c e
enaЫed
Глава 2. Загрузка и системные демоны
c r yp t d i s ks - e a r l y . s e rvi c e
c r yp t d i s ks . s e rv i c e
cup s - b rows e d . s e rv i c e
cups . s e rv i c e
mas ked
ma s ke d
enaЫed
d i s aЫ e d
wp a_s uppl i c a n t . s e rv i c e
x l l - c ommon . s e rv i c e
d i s aЫ e d
ma s ke d
85
1 8 8 unit f i l e s l i s ted .
Для подкоманд, действующих на определ е н н ы й модул ь ( н а п р и м е р , sys temc t l
s tatus) , команда systemctl обычно может при н имать и м я модуля без суффикса, ука­
зывающего тип модуля ( например, cups вместо cups . servi ce) . Тем не менее тип моду­
ля по умолчан ию, с которы м объединены простые имена, зависит от подкоманды .
В табл . 2 . 4 показа н ы наиболее востребова н н ы е и полезные подкоманды команды
systemctl (для получения полного списка с м . тап-страницу systemctl) .
Таблица 2 . 4 . Наиболее распространенные подкоманды команды sys temctl
Подкоманда
l i s t-uni t-files
Функци•
[ша блон}
Показывает установленные модули; существует возможность сравнения по ша блону
еnаЫе модуль
Вкл ючает модуль для активации при загрузке
di s aЫe модуль
Запрещает запуск модуля при загрузке
isolate ц ель
Изменяет режим работы на целе в о й
s tart модуль
Немедленно активирует модуль
s top модуль
Немедленно деактивирует модуль
res tart модуль
Немедленно перезагружает (или запускает, если не работает) модуль
s tatus модуль
Показывает состояние модуля и последние зап иси журнала
kill ша блон
Отправляет сигнал в модуль , соответствующий шаблону
reЬoot
Перезагрузка компьютера
daemon-reload
Переза г ружает файлы модулей и конфигураци ю sys temd
Состоян ие модул я
В вы воде команды systemctl l i s t-uni t - f i l e s , приведе нном в ы ш е , м ы в идим ,
что модул ь cups . service отключе н . Дл я получения более подробной и нформации м ы
можем испол ьзовать команду sys temctl status.
$ sudo sys temctl s tatus - 1 cups
cups . s e rv i c e - C U P S S chedul e r
L o a d e d : l o aded ( / l i Ь / s y s t e md / s y s t e m / cup s . s e rv i c e ; d i s a Ы e d ; vendor
p r e s e t : e n aЫ e d )
Ac t i ve : i n a c t i ve ( de a d ) s i nc e S a t 2 0 1 6 - 1 2 - 1 2 0 0 : 5 1 : 4 0 MST ; 4 s a g o
D o c s : man : cup s d ( 8 )
Ma i n P I D : 1 0 0 8 1 ( code=e x i t e d , s t a t u s = O / S U C C E S S )
Dec 1 2 0 0 : 4 4 : 3 9 u l s a h s y s t emd [ l ] : S t a r t e d C U P S Schedu l e r .
D e c 1 2 0 0 : 4 4 : 4 5 u l s ah s y s t emd [ l ) : S t a r t e d C U P S S c h e du l e r .
D e c 1 2 0 0 : 5 1 : 4 0 ul s ah s y s t emd [ l ) : S t opp i n g C U P S Schedul e r . . .
Dec 1 2 0 0 : 5 1 : 4 0 u l s a h s y s t emd [ l ] : S t opped C U P S S c h e du l e r .
Часть 1. Основы администрирования
86
Здесь команда sys temctl показы вает, что служба в настоя щее врем я неактивна
(de a d ) , и сообщает, когда процесс был прекраще н . (Для этого примера м ы откл юч ил и
его всего несколько секунд назад.) Он также показывает ( в разделе с надписью Loaded),
что служба по умолчанию была включена при запуске , но теперь она отключена.
П оследние ч етыре строки - это последние записи журнала. П о умолчан и ю зап и ­
си журнала конденсируются так , что каждая зап ись зан имает только одн у строку. Это
сжатие часто делает записи нечитае м ы м и , поэтому мы включили оп цию -1 для запроса
пол н ых записей. В этом случае нет н и какой разн ицы, но это полезная привычка.
В табл . 2.5 отображаются состоя н и я , с которы м и вы чаще все го столкнетесь при про­
верке модулей.
Табли ца 2 . 5 . Состояние модульных файлов
СостОАние
Описание
Ьаd
У менеджера sys temd возникла какая-то проблема; обычно это связано с о сбоем
модульного файла
d i s aЫ e d
Присутствует, но не настроен для автономного запуска
enaЫed
Инсталлирован и запущен; стартует автономно
indi rect
Отключен , но имеет одинаковые значения в разделах Al s o , которые могут быть включены
l i n ked
Модульный файл , доступный через символическую ссылку
mas ke d
Нежелательный статус с логической точки зрения
s tаtiс
Зависит от другого устройства; не требует установки
Состоя ния e n a Ы e d и d i s aЫ e d применяются только к модул ьн ы м файлам , которые
находятся в одном из систе м н ых каталогов systemd (т.е. они не связа н ы символической
сс ыл кой) и и м е ют раздел [ I n s t a l l J в своих модульных файлах. Включенные модул и ,
по- видимому, действител ьно должн ы сч итаться " и нсталл ирован н ы м и " , что означает,
что директи вы в разделе [ I n s t a l l ] был и выпол н е н ы и что устройство подкл ючен о
к его обычн ы м активацион н ы м три ггерам . В большинстве случаев это состояние застав­
ляет модуль автоматически активироваться после загрузки системы.
Аналогично, состояние d i s aЫ e d я вляется чем-то неправильным , потому что един ­
стве н ное, что фактически откл ючено, - это нормальный путь активаци и . Можно вруч ­
ную активиро вать устройство, которое было откл ючено, запустив команду sys temctl ;
менеджер systemd не будет возражать.
У м ногих устройств нет процедуры инсталляции, поэтому нел ьзя с казать, что о н и
вкл ючен ы или откл юче н ы ; о н и просто доступ н ы . Статус таких эле м ентов указан как
s t a t i c . Они активируются только вручн ую (systemctl start) или указываются в ка­
честве зависимостей от других активных модулей.
Файл ы , имеющие состояние l i n k e d , был и создан ы с помощью команды systemctl
l ink. Эта команда создает с и м волическую ссылку из одного из каталогов sys tem ме­
н еджера sys temd на модульный файл , который находится в другом месте в файловой
систе м е . Такие модул ь н ы е файлы могут обрабаты ваться команда м и или указы вать­
ся в качестве зависимосте й , но они не я вля ются полноправными элементами систе м ы
и имеют некоторые заметные отклонения. Например, применение команды sys temctl
di s aЬle к модульному файлу в состоя н и и l i n ke d приводит к удалению связи и всех
ссылок на него.
К сожалению, точ ное поведен ие модул ьных файлов в состоянии l i n ked недостаточ­
но хорошо докуме нтировано. Хотя идея хранить локальные модульные файлы в отдель-
Глава 2. Загрузка и системные демоны
87
ном репозитори и и связывать их с менеджером systemd имеет определенную привлека­
тельность, вероятно, это н е луч ш и й подход на данн ы й момент. П росто сделайте коп и и .
Состоя н и е ma s ke d означает " заблокирован адм и н и стратором " . Менеджер sys temd
знает о модул е , но е м у запре ще но активировать е го ил и де йствовать по л юбой из ero
конфигурацион н ых директив с помощью команды systemctl mask. В этом случае сле­
дует откл ючить модул и , находящиеся в состоян и и enaЫed или l i n ke d , с помощью ко­
манды sys temctl di saЫe и зарезервировать команду sys temctl m.ask дл я модул ей
в состоя н и и s t a t i c .
Возвращаясь к нашему исследованию службы cups, м ы могл и б ы испол ьзовать сл е­
дующие команды для ее повторного вкл ючения и запуска.
$ sudo sys temctl еnаЫе cups
S ynch r o n i z i n g s t a t e o f cup s . s e rv i c e w i t h S y sV i n i t w i t h / l iЬ / s y s t emd /
s y s t emd- s y s v- i n s t a l l . . .
Execu t i n g / l i Ь / s y s temd / s y s temd- s y s v- i n s t a l l е n а Ы е c u p s
i n s s e rv : w a r n i n g : c u r r e n t s t a r t r u n l e ve l ( s ) ( emp t y ) o f s c r i p t c u p s
ove r r i d e s L S B de f au l t s ( 2 З 4 5 ) .
i n s s e rv : w a r n i n g : c u r r e n t s t op run l e v e l ( s ) ( 1 2 З 4 5 ) o f s c r i p t ' c up s
ove r r i d e s L S B de f a u l t s ( 1 ) .
C r e a t e d s yml i n k f r om / e t c / s y s t e md / s y s tem/ s o c ke t s . t a r g e t . wa n t s / cup s . s o c k e t
t o / l i b / s y s temd / s y s t e m / c u p s . s o c ke t .
C r e a t e d s yml i n k f r om / e t c / s y s temd / s y s t em/mu l t i - u s e r . t a r g e t . wa n t s / c up s .
p a t h t o / l i b / s y s t emd / s y s t em / c u p s . p a t h .
$ sudo sys temctl s tart cups
·
Цел и
Модул ь н ы е файл ы могут объя влять свои отно ш е н ия с други м и модулями разл и ч ­
ными способа м и . Так, в при мере , приведен ном в начале раздела " Модули и модульные
файл ы " , спе цифи катор W a n t e d B y означает, что , есл и систе м а и м еет модул ь mul t i ­
user . target, то дан н ы й модуль должен зависеть от него (rsync . service } , когда тот
находится в состоян и и e n a Ы e d .
П ос кол ьку модули н е посредств е н н о поддержи вают управл е н и е зав и с и мостя м и ,
дл я реал изаци и экви вале нта уровней выпол н е н ия i n i t не требуется н и каких допол ­
н ител ьн ы х механизмов. Дл я ясности менеджер sys temd определяет отдел ь н ы й класс
модулей (типа . target), чтоб ы испол ьзовать их как маркеры общих режимов работ ы .
Однако цел и не и м е ют особой с ил ы , з а исключ е н ием управл е н и я завис и м остя м и . до­
ступного для л юбого другого модуля.
Тради цио н н ы й де мон init оп ределяет как м и н и мум се м ь уровн е й выпол н е н и я , но
многие из них на самом деле не используются . Стремясь к ложно понятой исторической
преемстве н ности , менеджер sys temd определяет цел и как прям ы е а налоги уровней за­
пуска демона ini t (runleve l O . target и т.д. ) . Он также определяет м н емонические
цел и для повседневного ис пользова н и я , такие как poweroff . target и graphical .
target. В табл . 2.6 показано сопоставление между уровнями выполнения ini t и целя­
ми systemd.
Единстве н н ы м и целями , которые действител ьно необходимо знать, являются mul ti ­
user . targe t и graphical . target дл я повседневного испол ьзован ия и res cue .
target для доступа к однопол ьзовател ьскому режи му. Для того чтобы измен ить теку­
щий режим работы систе м ы , используйте команду systemctl i solate:
$ sudo sys temctl isolate mul ti-user . tarqet
Часть 1. Основы администрирования
88
Таблица 2 . 6 . Сопоставление между уровня ми запуска ini t и системными целями
Уровень выполнения
Цепь
Описание
О
poweroff . target
Остановка системы
emergency
emergency . target
Простейшая оболочка для восстановления системы
1 , s, single
re scue . target
Однопользовательский режим
2
mul ti-user . target•
Многопользовательский режим ( командная строка)
3
mul ti -user . target•
Многопользовательский сетевой режим
4
mul ti-user . target•
Обычно не используется ini t
5
graphical . target
Многопользовательский сетевой режим с графическим
интерфейсом
6
reЬoot . target
Перезагрузка системы
" По умолчанию цель 11ul ti -user . targe t соответствует runlevelЗ . target, многопользовательскому сете­
вому режиму.
П одкоманда i s o l ate н азывается так , потому что она активирует указанную цел ь
и е е зависимости , но деактивирует все остальные модул и .
В традиционном демоне i n i t для изменения уровней запуска после загрузки с и ­
сте м ы испол ьзуется команда te l i n i t . Некоторые дистрибутивы теперь определя ют
telini t как символическую ссылку на команду systemctl.
Для того чтобы увидеть цель, к которой система загружается по умолчанию, запусти­
те подкоманду get-defaul t:
$ sys temctl ge t-default
g r a ph i ca l . t a r g e t
Большинство дистрибути вов Linux загружаются п о умолчанию в модуль graphical .
targe t , что не подходит для серверов, которы м не н ужен графический и нтерфейс. Но
это легко изменить:
$ sudo sys temctl set-default mul ti-user . target
Чтобы увидеть все доступные цели с истемы , запустите с исте м н ые списки:
$ sys temctl l i s t-units - - type = target
За висимости между модулями
П акеты п рогра м м ного обеспечения Linux обычно поставля ются со своим и соб­
стве н н ы м и модул ьн ы м и файлам и , поэтому с истемные адм и нистраторы не н уждаются
в подробном знани и всего языка конфигурации . Тем н е менее и м н еобходим ы рабочи е
знания с исте м ы зависимостей sys tem.d для диагностики и устранения пробле м с зави­
симостями.
Во-первых, не все зависимости являются явными. Менеджер sys temd берет на себя
функции старого демона inetd, а также расширяет эту идею в домене межпроцессной
системы связи D - Bus. Другим и словами , менеджер sys temd знает, какие сетевые порты
или I РС-соединения указывают, где будет размещаться указанная служба, и может про­
слуши вать запросы по этим каналам , не запуская службу. Если клиент выпол няет м ате­
риализацию, с истема просто запускает фактическое обслуживание и отключает соедине­
н ие. Служба запускается , есл и она фактически используется, и остается бездействующей
в противном случае.
глава 2. загрузка и системные демоны
89
Во-вторых. менеджер sys temd делает некоторые предположен ия о нормальном по­
ведении бол ьш и нства видов единиц. Точные предположения варьируются в зависи мости
от типа еди н ицы. Например, менеджер systemd предполагает, что среднестатистическая
служба является надстройкой , которая не должна запускаться на ранних этапах и н и циа­
лизации системы. Отдельные блоки могут отключать эти допущен ия с помощью строки
De f a u l t De p e n de n c i e s ; f a l s e
в разделе [ Un i t ] и х модульного файла; п о умолчан и ю значение равно t ru e . Чтобы уви­
деть точ ные предположен и я , которые применяются к каждому типу модул я , см. спра­
воч ную стран и цу дпя типа sys temd . uni t, ( например. man systemd . service).
Третий класс зависимостей - те , которые я вно объявлены в разделе [ Un i t ] модуль­
н ы х файлов. Доступные параметры показа н ы в табл. 2 . 7 .
Таблица 2 . 7 . Явные зависимости в разделе [ Unit] модульного файла
Параметр
Значение
Wan t s
Модул и , которые должны быть активированы одновременно, если это возможно, н о н е
обязательно
Requi re s
Строгие зависимости ; отказ от каких-либо предварительных условий прекращает работу
этой службы
Requi s i t e
Аналогично Requi r e s , но модуль должен быть активным
Bindsтo
Аналогично R e qu i r e s , но модуль должен быть связан еще более тесно
PartOf
Аналогично R e q u i r e s , н о вли яет только на запуск и остановку
С on f 1 i с t s
Отрицательные зависимости ; не может взаимодействовать с этими единицами
За искл ючением параметра Co n f l i c t s , все параметры в табл. 2 . 7 выражают основ­
ную идею о том , что настраиваем ы й модуль зависит от некоторого набора других моду­
лей. Точ н ые различия между эти м и параметрами явл яются незнач ительны м и и в первую
очередь и нтересн ы разработч икам служб. Когда это возможно, предпочтение следует от­
давать наименее ограничительному варианту, W a n t s .
М ожно рас ш ирить груп пу W a n t s или R e qu i r e s , создав файл модул ь ный - ф а йл .
wants ил и модуль ный - ф а йл . requires в каталоге /etc/systemd/ sys tem и добавив
туда с и м волические ссылки на другие модул ьн ы е файл ы . Еще луч ш е , просто дайте ко­
манде sys temctl сделать это за вас. Например , команда
$ sudo sys teшctl аdd-хочет шul ti-user . target my . local . s ervice
добавляет зависимость от модуля my . local . service к стандартной многопол ьзова­
тел ьской цел и , гарантируя , что служба будет запускаться каждый раз, когда система пе­
реходит в м ногопол ьзовател ьски й режим .
В большинстве случаев такие специальные зависи мости устанавл иваются автомати­
чески на основе раздела [ I n s t a l l J в модульных файлах. Эгот раздел содержит опции
W a n t e d B y и Re q u i r e d B y , которые ч итаются , только если модуль включен с помощью
команды systemctl еnаЫе или отключен с помощью команды systemctl disaЫe.
При включен и и они заставляют команду sys temctl выполнять эквивалент add-wants
для каждой опции W a n t edBy или add-require для каждой опции R e q u i redBy.
Раздел ы [ I n s t a l l J сам и по себе н е вл ияют на нормал ьную работу, поэтому, если
модуль не запускается , убедитесь, что он правильно подключен и свя за н с сим воличе­
ской ссылкой .
90
часть 1. Основы администрирования
Порядок вы пол нен ия
Разумно предположить, что есл и модуль А требует ( R e q u e r e s ) наличия модуля В,
то модуль В будет запуще н ил и н астрое н до модуля А. Но на самом деле это н е так .
В менеджере sys temd порядок, в котором блоки активируются ( ил и деактивируются),
я вляется совершенно отдельным вопросом .
Когда система переходит в но1юе состояние, менеджер systemd сначала отслежива­
ет различн ые источ н и ки инфор мации о зависимости , изложен н ые в предыдущем раз­
деле, чтобы определить задействованные модул и . Затем он испол ьзует разделы Be f o r e
и A f t e r из модульных файлов, чтобы упорядоч ить с писок зада н и й . Есл и модул и н е
имеют разделов Be f o r e или Af t e r , они м о гут быть скорректированы параллел ьно.
Это удивительная , но достой ная внимания функция дизайна. Одной из основных целей
проектирования менеджера syst8111d было облегчение параллелизма, поэтому логично, что
модули не получают зависимостей сериализации, если они явно не запрашивают их.
На практике раздел A f t e r испол ьзуется чаще , чем Wa n t s или Requ i r e s . Определе­
н ия цел е й ( и , в ч астност и , обратных зависимосте й , закодирова н н ы х в предложениях
W a n t edBy и Requ i redBy) устанамивают общие контуры служб, работающих в каждом
рабочем режи м е , а отдельные пакеты беспокоятся тол ько о своих непосредствен н ых
и пря м ых зависимостях.
Б ол ее сл ож н ый п ри м ер ф ай л а
Теперь внимател ьно рассмотр и м несколько директив, испол ьзуе м ы х в модульных
файлах. Вот модул ьн ы й файл дл я веб-сервера NG I N X, nginx . service.
[ Un i t ]
De s c r i p t i on=The n g i n x Н Т Т Р and r e ve r s e p r o x y s e rv e r
A f t e r = n e t wo r k . t a r g e t r emo t e - f s . t a r g e t n s s - l o o kup . t a r g e t
[ S e rvi c e ]
T ype= f o r k i n g
P I DF i l e = / r u n / n g i n x . p i d
Exe c S t a r t P re = / u s r /b i n / rm - f / r u n / ng i n x . p i d
Exe c S t a r t P r e = / us r / s b i n / n g i nx - t
E x e c S t a r t = / u s r / sb i n / ng i n x
E x e c Re l oa d= / b i n / k i l l - s H U P $ МAI N P I D
K i l lMode= p r o c e s s
K i l l S i gn a l = S I GQU I T
T ime ou t S t op S e c = S
P r i v a t e Tmp= t rue
[ Install ]
Wante dBy=mul t i - u s e r . t a rge t
Эта служба имеет тип fo r k i n g , что означает, что команда запуска должна завершить­
ся , даже если демон продолжает работать в фоновом режиме. Так как менеджер systemd
н е будет не посредственно запускать демона, тот записывает с вой идентификатор P I D
( идентификатор процесса) в указанном P I D Fi l e , чтобы systemd мог определить, какой
процесс является ос новным экзе м пл яром демона.
Строки Е х е с - это команды для запуска в разл и ч н ы х обстоятел ьствах. Ком а нды
E xe c S t a rt P re запускаются до фактического запуска службы ; показанные здесь коман­
ды подтверждают синтаксис конфигурационного файла NG I NX и гарантируют удале ­
н ие л юбого существующе го РI D-файла. Exe c S t a r t - это команда, которая фактически
Глава 2. загрузка и системные демоны
91
запускает службу. Ком анда E x e cRe l o a d сообщает менеджеру sys tem.d, как заставить
службу перечитать ее файл конфигурации . (Менеджер system.d автоматически устанав­
ливает переменную среды МAI N P I D в соответствующее значение.)
m Дополнительную и нформаци ю о сигналах см. в разделе 4 . 2 .
Завершение этой службы обрабатывается через параметры K i l lMode и Ki l l S i gna l ,
которые сообщают sys tem.d, что демон службы и нтерпретирует с игнал QU I T как и н ­
струкци ю мя очистки и выхода. Строка
Exe c S t op = / bi n / k i l l - s H U P $ МA I N P I D
будет и м еть по существу тот ж е результат. Если работа демона не закончится з а коли­
чество секунд, заданных параметром T imeou t S t op S e c , менеджер sys tem.d заставит его
прекратить работу с помощью сигнала ТЕRМ, а затем неперехватываем оrо с игнала K I LL.
Параметр P r i va t e Tmp
попытка повысить безопасность. О н помещает каталог
службы / tmp в место, отличающееся от фактического каталога / tm.p, которы й использу­
ется всем и процессами и пользователя м и системы.
-
Л окальные службы и настрой ки
Как показано в предыдущих п р и мерах, довольно п росто создать модул ь н ы й файл
мя домашней службы . Просмотрите примеры в каталоге /usr / l ib/ system.d/ system
и адаптируйте их к своим потребностям . Для получ е н и я пол н о го с п и с ка парам е ­
тров конфигураци и служб обратитесь к справочной странице мя sys tem.d . service.
Параметр ы , общ и е для всех типов устройств, о писан ы н а с правоч н ой стра н и це
sys tem.d . uni t.
Поместите свой новы й файл в каталог /etc/ sy s tem.d/ sys tem.. Затем можно запу­
стить команду
$ sudo sys temctl еnаЫе custoш . service
мя активации зависимосте й , перечислен н ых в разделе [ I n s t a l l J в служебном файле.
Как правило, н е следует редактировать модул ь н ы й файл , написан н ы й не вам и .
Вместо этого создайте каталог конфигураци и в каталоге /etc/ system.d/ system./unit­
file . d и добавьте один или несколько файлов конфигураци и , которы е называются ххх .
conf. Часть ххх не и меет значен и я ; п росто убедитесь, что файл и меет суффикс . conf
и находится в нужном м есте. Имя override . conf я вляется стандартным.
Файл ы с рас ш ирени е м . conf имеют тот же формат, что и м одульные файл ы , и на
самом деле менеджер sys tem.d с глаживает и х все в месте с исходны м файлом. Однако,
если оба источн и ка поп ытаются установить значение одного итого же параметра, пере­
определенные файлы имеют приоритет над исходны м и модул ьн ы м и файлами .
Следует иметь в виду, что м ногие параметры менеджера system.d могут отображаться
в модул ьном файле более одного раза. В этих случаях множествен н ы е значен и я обра­
зуют список и остаются акти в н ы м и одноврем е н но. Если вы задаете значение в файле
override . conf, оно присоединяется к списку, но не заменяет существующие записи.
Это может быть н е тем , что вы хотите. Чтобы удалить существующие зап ис и из с писка,
просто присвойте параметру пустое знач е н ие , а затем добавьте свой .
Рассмотри м пример. Предположим , что ваша организация хранит файл конфигу­
раци и N G I NX в нестандартном месте, напри мер /usr/ l ocal /www / nginx . conf. Вам
нужно запустить демон nginx с параметром - с /usr/ local /www / nginx . conf, чтобы
он мог найти нужный файл конфигурации .
Часть 1. Основы администрирования
92
Вы н е можете просто добавить эту опцию в файл / u s r / l ib / sys temd / sy s tem/
nginx . service , потому что он будет замен яться каждый раз, когда пакет N G I NX об­
новляется или модифицируется .
Вместо этого можно использовать следующую последовател ьность команд.
$ sudo mkdir /etc/sys temd/ sys tem/nginx . service . d
$ sudo cat > ! $ / override . conf1 2
[ S e rv i c e ]
Exe c S t a r t =
Ex e c S t a r t = / u s r / s b i n / n g i n x - с / u s r / l oc a l / www / n g i n x . c on f
< Ct r l + D>
$ sudo sys temctl daemon-reload
$ sudo sys temctl res tart nginx . service
Первый параметр E xe c S t a rt= удаляет текущую запись, а второй устанавл и вает ал ь­
тернативную команду запус ка. Ком анда sys temctl daemon-reload осуществляет по­
вторн ы й синтаксический разбор модульн ых файлов.
Тем н е менее она не перезапускает демоны автоматически , поэтому вам придется по­
вторно выполн ить команду systemctl , чтобы изменения вступил и в силу немедленно.
Эта последовател ьность команд представляет собой настол ько расп ространенную
идиому, что менеджер systemctl теперь реализует ее непосредствен но:
$ sudo sys temctl edi t nginx . service
<о тр ед а к тируй те з а меща ющи й фа йл в р еда к т ор е>
$ sudo sys temctl res tart nginx . service
Как уж было сказано, вам все равно придется перезапустить менеджер вруч ную.
П оследнее, что нужно знать о переопределяемых файлах, закл ючается в том , что он и
не могут изменить раздел [ I n s t a l l ] модул ьного файла. Л юбые сделан н ые вам и изме­
нения молча и гнорируются. Просто добавьте зависимости напрямую с помощью команд
systemctl add-needs или systemctl add-require.
Предостережения об уп равлен и и службами и запус ком
П р и м е н е н ие м е н еджера sys temd имеет много архитектурн ых последстви й , и е го
адаптация - не простая задача для разработчи ков дистрибути вов Linux. Текущие в ы ­
пуски - это в основном систе м ы Франке н штейна, которые используют большую часть
с истем ы , но также сохраняют несколько ссылок на прошлые верс и и . И ногда старые
верси и просто еще не полностью преобразованы . В других случаях для обл е гчения со­
вместимости был и оставлены различные форм ы устаревшего кода.
Хотя менеджер sys temctl можно и нужно испол ьзовать для управления службам и
и демонам и , н е уди вительно, если вы д о с их пор запус каете традицион н ы е сценарии
ini t или связан ные с ними вспомогательные команды. Если в ы попытаетесь использо­
вать менеджер systemctl Д/I Я откл ючен ия сети в системе CentOS или Red Hat , напри­
мер, вы получите следующий вывод.
$ sudo sys temctl di s aЫe network
n e t w o r k . s e rv i c e i s n o t а n a t ive s e rvi c e ,
Exe c u t i ng / s b i n / ch k c on f i g n e t wo r k o f f
r e d i r e c t i n g to / s b i n / ch k c on f i g .
1 2 С и мвол ы > и ! $
это метасим волы обол очки . С и м вол > переадресовы вает вывод в файл ,
а дей ствие с и мволов ! $ рас п ространяется до последнего компонента п редыдущей команд н ой
строки , так что вам не нужно его повторно вводить. Все обол очки понимают эти обозначени я .
Информацию о некоторых других удобн ых функциях см . в раздел е 7 . 2 .
-
Глава 2. Загрузка и системные демоны
93
W Дополнительную информацию о службе Apache см. в разделе 1 9 . 3 .
Традиционные сценар и и и н ициализации часто продолжают функционировать в с и ­
сте ме sys temd. Н а п р и м е р , сценар и й инициализации / e t c / r c . d/ in i t . d/my - o l d ­
s e rv i c e м ожет б ыть автоматически сопоставл е н с модул ь н ы м файлом , так и м как
my -old- service . servi ce , во врем я и н и циализации с истем ы или при выполнении
команды systemctl daemon-reload. Примером я вляется служба Apache 2 н а Ubuntu
1 7.04: попытка откл ючить apache2 . service приводит к следующему выводу.
$ sudo sys temctl di saЫe apache2
S y n c h r on i z i n g s t a t e o f a p a c he 2 . s e rvi c e w i t h S ys V s e rv i c e s c r i p t wi t h
/ l iЬ / s y s t emd / s y s t emd - s y s v - i n s t a l l .
E x e c u t i n g : / l i Ь / s ys t emd/ s y s t emd- s y s v - i n s t a l l di s aЫ e a p a ch e 2
Конечный результат соответствует тому, что вы хотели , н о процесс проходит доволь­
но окольным путем .
В системах Red Hat и CentOS все еще запус кается сценарий /etc/rc . d/ rc .
l o c a l во вре м я загруз к и , есл и в ы настроите е го на в ы п ол н е н и е . 1 3
Теоретически можно испол ьзовать этот сценарий для взлома уязвимостей
сайта или загрузки задач , если это необходимо. (На данн ы й момент, однако,
вам нужно проигнорировать хакерские возможности и сделать что-то полез­
ное в системе, создав соответствующий набор файлов модулей.)
RHEL
Н екоторые задачи загрузки систем Red Hat и CentOS продолжают использовать кон­
фигурационн ы е файл ы , найденные в каталоге /etc/ sysconfig. Эти данные приведен ы
в табл . 2 . 8 .
Таблица 2 . 8 . Файлы и подкаталоги каталога Red
Hat
/etc/ sysconfig
Файл или каталоr
Содержимое
console/
Каталог, который исторически допускал настраиваемое сопоставление клавиш
crond
Аргументы для п ерехода к демону crond
ini t
Конфи гурация дл я обработки сообщений из сценариев запуска
iptaЫe s - config
Загружает дополнительные модул и ip taЫ e s , такие как NАТ- помощники
ne twork - s crip ts/ Сценарии аксессуаров и сетевые файлы конфи гураци и
nfs
Необязател ьные аргументы RPC и N FS
ntpd
Параметры командной строки ntpd
s e linux
Символ ическая ссылка на каталог / etc/ sel inux/ config"
• устанавливает аргументы для системы SELinux или позволяет полностью отключить ее; см. раздел 3.4.
Пара пунктов табл . 2 . 8 заслуживают допол нительного комментария.
•
•
Каталог сетевых сценариев содержит допол н ительные м атери ал ы , относящиеся
к сетевой конфигурации . Единственное, что вам может понадобиться измен ить
здесь, - файлы с именем ifcfg-interface. Например, файл network-scripts/
i fcfg-ethO содержит параметры конфигурации для интерфейса eth O . Он уста­
навливает I Р-адрес и сетевые параметр ы интерфейса. Дополнительная информа­
ция о настройке сетевых интерфейсов приведена в разделе 1 3 . 1 О.
Файл iptaЫ e s - config фактически н е позволяет изменять правила iptaЬles
(брандмауэра) . Это просто с пособ загрузки допол н ительных модул е й , таких как
1 1 Быстрая команда sudo chmod +х /etc/rc . d/rc . local гарантирует, что файл будет исполняться.
Часть 1. основы администрирования
94
трансляция сетевых адресов ( NAT) , есл и вы собираетесь пересылать пакеты или
испол ьзовать с истему в качестве маршрутизатора. Допол н ител ьная и нформация
о настройке iptaЫes содержится в разделе 1 3. 1 4.
Жу рнал sys temd
Фиксация сообщен и й в журнале, созданных ядром , всегда был сложной задачей. Она
стала е ще более важной с появлен и е м виртуальных и облач ных систе м , поскольку не­
возможно просто стоять перед консолям и этих систем и следить за тем , что происходит.
Часто важнейшая диагностическая информация терялась в эфире.
Менеджер systemd устраняет эту проблему с помощью универсальной структуры ве­
дения журнала, которая включает все сообщения ядра и службы от начал ьной загрузки
до окончательного завершения. Этот объект, называем ы й журналом , управляется демо­
ном j ournald.
Систе м н ые сообщен и я , зап иса н н ы е журналом , хран ятся в каталоге / run . Демон
rsyslog может обрабаты вать эти сообщения и хранить их в традиционн ых файлах жур­
налов или пересыл ать их на удал е н н ы й сервер syslog. Можно также напрямую обра­
щаться к журналам с помощью команды j ournalctl.
Без аргументов команда j ournalctl выводит все записи журнала (начиная с сам ых
старых) .
$ j ournalctl
-- L o g s b e g i n at F r i 2 0 1 6 - 0 2 - 2 6 1 5 : 0 1 : 2 5 UTC , e n d at F r i 2 0 1 6 - 0 2 - 2 6
1 5 : 0 5 : 1 6 uтс . - F e b 2 6 1 5 : 0 1 : 2 5 ubun t u s y s temd - j o u r n a l [ 2 8 5 ] : Run t ime j ou rn a l i s u s i n g
4 . 6М ( ma x a l l owed 3 7 . ом, t
Feb 2 6 1 5 : 0 1 : 2 5 ubunt u s y s t emd- j ou r na l [ 2 8 5 ] : Run t ime j ou r n a l i s u s i n g
4 . 6М ( ma x a l l owed 3 7 . ОМ , t
Feb 2 6 1 5 : 0 1 : 2 5 ubun t u k e r ne l : I n i t i a l i z i n g c g roup s ub s y s cpu s e t
F e b 2 6 1 5 : 0 1 : 2 5 ubuntu k e r ne l : I n i t i a l i z i n g c g roup s u b s y s cpu
Feb 2 6 1 5 : 0 1 : 2 5 u b u n t u k e r n e l : L i nux ve r s i on 3 . 1 9 . 0 - 4 3 - g e n e r i c ( bu i l d d @
l c y O l - 0 2 ) ( gc c ve r s i o n 4 .
Feb 2 6 1 5 : 0 1 : 2 5 ubuntu k e r n e l : C ommand l in e : BOOT_ I МAGE= / b o o t /vml i n u z 3 . 1 9 . 0 - 4 3 -gene ric root=UUI
Feb 2 6 1 5 : 0 1 : 2 5 u b u n t u k e r ne l : KERNEL s u pp o r t e d cpus :
F e b 2 6 1 5 : 0 1 : 2 5 ubun t u k e r ne l : I nt e l Genui n e i n t e l
Можно настроить демон j ournald для сохранения сообщен и й из предыдущих загру­
зок. Для этого отредактируйте файл /etc/ systemd/ j ournald . conf и н астройте атри ­
бут S t o r a g e :
[ Journa l ]
St orage=pe r s i s tent
Изменив конфигурацию демона j ournald, вы получите список приоритетных загрузок.
$ j ournalctl --lis t-boots
- 1 a 7 3 4 1 5 f a de 0 e 4 e 7 f 4 b e a 6 0 9 1 3 8 8 3 d l 8 0dc F r i 2 0 1 6 - 0 2 - 2 6 1 5 : 0 1 : 2 5 UTC
F r i 2 0 1 6 - 0 2 - 2 6 1 5 : 0 5 : 1 6 UTC
О O c 5 6 3 f a 3 8 3 0 0 4 7 e c a a 2 d 2 b 0 5 3 d4 e 6 6 l d F r i 2 0 1 6 - 0 2 - 2 6 1 5 : 1 1 : 0 3 UTC Fri
2 0 1 6 - 0 2 - 2 6 1 5 : 1 2 : 2 8 uтс
Зате м можно получать доступ к сообщен и я м из предыдущей загрузки , ссылаясь
на свой и ндекс или длинный идентификатор.
Глава 2. Загрузка и системные демоны
95
$ j ournalctl -Ь -1
$ j ournalctl -Ь a7 3 4 1 5fade0 e4e7f 4bea6 0 9 1 3 8 8 3d1 8 0 dc
Для того чтобы ограничиться кон кретны м модулем , используйте флаг -u.
$ j ournalctl -u ntp
- - L o g s b e g i n at F r i 2 0 1 6 - 0 2 - 2 6 1 5 : 1 1 : 0 3 UTC , e n d a t F r i 2 0 1 6 - 0 2 - 2 6
1 5 : 2 6 : 0 7 uтс . - F e b 2 6 1 5 : 1 1 : 0 7 ub - t e s t - 1 s y s t ernd [ l ] : S t opped L S B : S t a r t N Т Р d a emon .
Feb 2 6 1 5 : 1 1 : 0 8 ub - t e s t - 1 s y s t e rnd [ l ] : S t a r t i n g L S B : S t a r t N Т Р d a emon
Feb 2 6 1 5 : 1 1 : 0 8 ub - t e s t - 1 n t p [ 7 6 1 ] : * S t a r t i n g N T P s e rve r n t p d
.
.
.
Ведение журнала sys temd более подробно описано в главе 1 О.
2 .8. СЦЕНАРИИ ИНИЦИАЛИЗАЦИИ и З А ПУС К А
СИСТЕМЫ FREEBSD
Система Free B S D использует и н ициал изацию в стиле B S D , который н е поддержи­
вает концепцию уровней выполнения. Чтобы привести систему в пол ностью загружен ­
н о е состояни е , и н ициал изация Free BSD запускает программу /etc/rc. Эта программа
является сценарием оболоч к и , но ее нельзя изменять напрямую. Вместо этого система
rc реал изует несколько стандартных с пособов расш ирения систе м ы запус ка и измене­
ния конфигураци и , доступных для систе м н ы х адми н истраторов и пакетов п рогра м м ­
ного обеспечения.
Ш И нформацию о сценариях оболочки см . в главе 7 .
Прежде всего , /etc/rc - это оболочка, которая за пус кает другие сценарии , боль­
ш инство из которых н аходятся в каталогах /u s r / l o ca l / e t c / rc . d . и / e tc / rc . d.
Однако, прежде чем запускать любой из этих сценариев, с истема ro выпол няет три фай­
ла, которые содержат информацию о конфигурации мя системы.
•
/etc/defaults/config
•
/ etc/ rc . conf
•
/etc/rc . conf . local
Эти файлы сами я вляются сценариям и , но обычно они содержат тол ько определения
значений переме н н ых оболочки. Затем сценар и и запуска проверяют эти пере м е н н ые ,
чтобы определить, как вести себя дальше. ( Программа /etc/rc использует некоторые
средства оболочки, чтобы гарантировать, что переменные, определен ные в этих файлах,
будут видны повсюду. )
Ш Дополн ительную информацию о сценариях оболоч ки см . в глав е 7 .
В файле /etc/defaul t s / rc . conf перечислены все параметры конфигурации и их
настройки по умолчанию. Н икогда не редактируйте этот файл , чтобы сценарий и ници­
ализации не перезаписал ваш и изменения при следующем обновлен и и с истемы. В место
этого просто переопределите значен и я по умолчан и ю , установив их с нова в файлах
/etc / rc . conf или /etc/rc . conf . local . На справоч ной странице rc . conf и меется
обширный список переменных, которые можно задать .
Теоретически файлы rc . conf могут также содержать имена других каталогов, в ко­
торых для запуска сценариев м ожно установить значение переменной local s tartup.
_
Часть 1 . основы администрирования
96
Значение по умолчан и ю
/usr/local/etc/rc . d, и м ы рекоме ндуем оставить е го не­
изме н н ы м . 1 4
Загл я нув в файл / e t c / r c . d, м ожно увидеть , что существует м н ожество разл и ч ­
н ы х сценариев запуска, в стандартной установке их более 1 50 . Файл / e t c / r c запу­
с кает эти сце нар и и в порядке , определе нном командой rcorder, которая считывает
сценар и и и и щет информацию о зависимостях, которая была закодирована стандарт­
н ы м образо м .
Сценарии запуска Free B S D для разнообразных служб довольно просты . Например,
верхняя часть сценария запуска s shd выглядит следующим образом :
-
# ! / Ьi n / s h
# PROVI D E : s s hd
# REQU I RE : LOG I N F I L E S Y S T EMS
# KEYWORD : s h u t d own
/etc/rc . subr
name= " s s hd "
r c v a r = " s s h d е n аЫ е "
c omma nd= " / u s r / s Ь i n / $ { n ame } "
П еремен ная r cvar содержит и м я пере м е н ной , которая должна быть определ е н а
в одном из сценариев rc . conf', в данном случае s shd enaЬle. Если вы хотите , что­
бы для автоматического запуска во время загрузки использовался демон s shd ( реаль­
ный демон, а н е с ценарий запуска, хотя оба называются sshd) , поместите в файл /etc/
rc . conf' строку:
_
s s hd е n а Ы е = " Y E S "
Если эта переменная и меет значение "NO" или закомментирована, сценарий s shd не за­
пускает демон или не проверяет, следует л и его останавливать при выключении системы .
Команда servioe обеспечивает интерфейс реального времени в с истеме rc . d опера­
ционной систе м ы Free B S D . ' 5
Н апример, чтобы остановить службу sshd вруч ную, можно запустить команду
$ sudo service s shd s top
Обратите внимание: этот метод работает тол ько в том случае , есл и служба указана
в файлах /etc/rc . conf'. Если это не так, используйте подкоманды onestop, onestart
или onerestart, в зависимости от того, что вы хотите сделать. ( Команда service , как
правило, напомнит вам об этом, есл и это необходимо.)
2 .9. ПРОЦЕДУРЫ ПЕРЕЗАГРУЗКИ И ВЫКЛЮЧЕНИЯ
И сторически сложилось так, что маши н ы U N IX и Linux очень строго регламе нтиро­
вал и процесс выкл ючения. Современные с исте м ы стали менее чувствител ьн ы м и , осо­
бенно если испол ьзуется надежная файловая система, но всегда полезно выключ ить ма­
шину, когда это возможно.
1 4Для л окал ьны х настроек можно л и бо создать стандартные сценари и в стиле rc . d, которые
находятся в каталоге /usr/local/etc/rc . d, либо редактировать общедоступный сценари й /etc/
rc . local . Первый вариант предпочтител ьнее.
1 5 Версия с л ужбы , которую и с п ользует с и стема Free B S D , осн овы вается на команде s e rvi ce
в системе Liпux, которая управляет тради ционн ы м и службам и ini t .
Глава 2. Загрузка и системные демоны
97
Операционные системы прошл ых лет приучали многих систе м н ы х адми нистраторов
перезагружать систему как первый шаг при решен и и л юбой пробл е м ы . Тогда это была
адаптивная привычка, но в наши дни она чаще приводит к ненужн ы м затратам времени
и преры ванию обслуживания. Сосредоточ ьтесь н а выявлен и и основной при ч и н ы про­
бле м , и вы, вероятно, обнаружите , что nерезагружаетес ь реже.
Тем не менее после изменения сценария запуска или внесения значительных измене­
ний в конфигурацию рекомендуется выпол нить перезагрузку. Эта проверка гарантирует
успешную загрузку с исте м ы . Есл и вы обнаружили проблему, но не решал и ее в течение
нескольких недель, то вряд л и вспомните детали последних изменен и й .
Выкл ючение физических систем
Основные обязанности, необходимые для закрытия с исте м ы , вы пол няет команда
hal t. Она регистрирует выкл ючение , прекрашает несуществен н ые процесс ы , сбрасыва­
ет кеш ирова н н ые блоки файловой с исте м ы н а диск и останавливает ядро. В большин­
стве с истем команда hal t -р начинает процесс выключения с истемы.
Команда reboot по существу идентична команде hal t , но она заставляет маш и н у
перезагружаться , а не останавл иваться.
Команда shutdown - это надстройка над команда м и hal t и reboot, которая обе­
спечи вает заплан ирован ные выключения и выдачу тревожн ых предупрежден и й для за­
регистрированных пользователей. Она восходит к эпохе систем разделения времен и и в
настоящее время в значительной степен и устарела. Команда shutdown не делает ничего
важного, кроме выпол н е н ия команд hal t или reboot, поэтому ее можно не испол ьзо­
вать, если у вас нет м ногопол ьзовательских систе м .
Выключение облачных систем
Можно остановить или перезапустить облачную систему л ибо с сервера (с помощью
команды halt ил и reboot, как описано в предыдущем разделе ) , либо с помощью веб­
консоли поставшика облачных выч ислен и й ( ил и эквивале нтного и нтерфейса A P I ) .
Вообще говоря , отключение систе м ы с помошью облачной веб-консоли сродн и от­
ключению питания. Л уч ш е , есл и виртуальный сервер будет управлять собствен н ы м вы­
ключе н и е м , но если он перестает отвечать н а запрос ы , все что вам остается - откл ю­
ч ить е го с помошью веб-консол и . Что еще можно сделать?
В любом случае убедитесь, что вы понимаете , что означает выключение с точ ки зре­
ния поставщика облака. Б ыло бы очень обидно уничтожить ваш у систему, когда вы хо­
тели всего л и ш ь перезагрузить ее.
В среде AWS операции S top и ReЬoot делают именно то, что вы ожидаете. Команда
Terminate деактивирует экзем пляр и удаляет его из памяти . Есл и для базового устрой­
ства хранения установлено значение d e l e t e o n t e rm i n a t i o n (удалить при заверше­
нии) , будет ун ичтожен не тол ько ваш экзем пляр, но и дан ные на корневом диске . Все
хорошо, если вы хотели сделать именно это. Если же вы считаете , что это плохо, можно
включить параметр t e rm i n a t i o n p r o t e c t i o n (защита завершения) .
2.1 о. Что ДЕЛАТЬ, ЕСЛИ СИСТЕМА НЕ ГРУЗИТСЯ?
М ножество п робл е м может помешать загрузке систе м ы , нач и н ая от неисправн ых
устройств и заканч и вая обновле н и я м и ядра . Сушествует три основных подхода к этой
ситуаци и, перечисленные здесь в порядке нежелател ьности.
Часть 1. Основы администрирования
98
•
•
•
Не отлаживать; просто верн ите систему в хорошо известное состоя н ие.
Довести с истему до уровня , достаточного для запус ка оболочки и отладки в и нте ­
рактивном режиме.
Загрузить отдел ьн ы й с исте м н ы й образ , смонтировать файловые систе м ы неис­
правной с истемы и исследовать е го.
Первый вариант наиболее часто используется в облаке , но он может быть полезе н и на
физических серверах, если у вас есть доступ к последнему образу всего загрузочного дис­
ка. Если ваша организация делает резервные копи и файловой систе м ы , восстановление
все й систе м ы может создать больше проблем , чем хотелось бы. М ы обсуждаем вариант
восстановлен ия все й системы в режиме восстановлен ия облачных систем немного ниже.
В оставшихся двух подходах ос новное внимание уделяется предоставлению вам до­
ступа к с исте м е , определ е н и ю основной пробл е м ы и исправл е н и ю любых пробл е м .
Загрузка неисправной систе м ы в оболочку на сегодн я ш н и й де н ь я вляется предпочти ­
тел ьным вариантом , но проблем ы , которые происходят на ранн и х этапах загрузки , мо­
гут привести к н арушению этого подхода.
Режим " загрузка в оболочку" известен как однопол ьзовател ьский режим или режи м
с пасения ( rescue mode) . Систе м ы , которые используют менеджер sys temd, имеют еще
более примитивный вариант, доступный в форме аварий ного режима (emergency mode) ;
он концептуально похож на однопол ьзовательский режи м , но делает абсол ютн ый мини­
м ум работы перед запуском оболочки.
П оскол ьку однопол ьзовател ьский режи м , режи м спасе н ия и авар и й н ы й режи м не
настраивают сеть и не запус кают связанн ые с сетью службы , обычно, чтобы их исполь­
зовать, н еобходим физический доступ к консол и . В результате одн опользовательский
режим обычно н едоступен для облачных с исте м . Мы рассмотрим н екоторые варианты
восстановления испорче н н ых облач н ых образов чуть н иже.
Однопользовател ьский режим
В однопользовательс ком режиме , также известном как rescue . target, для систе м ,
использующих менеджер sys temd, запускается только м и н и мал ьн ы й набор процессов,
де монов и служб. Корневая файловая система смонтирована ( как правило, / u s r ) , но
сеть остается неини циал и зированной.
Во врем я заrрузки вы запраши ваете однопол ьзовател ьский реж и м , передавая аргу­
мент ядру, обычно s ingle или - s . Это можно сделать с помощью интерфейса команд­
ной строки загрузчика.
В некоторых случаях он может быть настроен автоматически в качестве опции м е н ю
загрузки. Если с истема уже запущена, ее можно перевести в однопол ьзовател ьский р е ­
жим с помощью команды shutdown ( Free B S D ) , tel ini t (традицион н ы й ini t) ил и
systemctl ( systemd).
Ш Дополнительную информацию об учетной записи root см. в главе 3 .
Системы Sane перед запуском однопользовательской корневой оболочки запрашива­
ют корневой парол ь. К сожалению, это означает, что сбросить забыты й корневой пароль
в однопол ьзовательском режиме практически невозможно. Если вам нужно сбросить па­
роль, придется получить доступ к диску с помощью отдельного загрузочного носителя.
Ш Допол нительную информацию о файловых системах и монитори н ге см. в главе 5.
И з однопользовательс кой оболоч ки можно выпол нять команды так же , как при вхо­
де в систему с полной загрузкой . Однако и ногда монтируется только корневой раздел ;
Глава 2. Загрузка и системные демоны
99
чтобы испол ьзовать программ ы , которые не находятся в каталогах /Ьin, / sЬin или
/etc, н еобходимо смонтировать другие файловые с исте м ы вручную.
Ч асто можно н айти указател и на доступные файловые с исте м ы , просмотрев ка­
талог /etc/ f s tab . В с исте м е Linux можно выпол нить команду fdi s k -1 (буква L
в н ижнем регистре) , чтобы п росм отреть с писок разделов диска локальной с исте м ы .
Аналогичная процедура для с истемы Free B S D заключается в том , чтобы выпол н ить ко­
манду camcontrol devlist для идентификации дисковых устройств, а затем - коман­
ду fdi sk -s устройств о для каждого диска.
Во м ногих однопол ьзовательских средах корневой каталог файловой систе м ы начи­
нает монтироваться в состоян и и " только дл я чте н ия " . Е сли каталог /etc является ча­
стью корневой файловой с исте м ы (обы ч н ы й случай ) , то будет невозможно редактиро­
вать многие важные файлы конфигурации . Чтобы устранить эту проблему, необходимо
начать сеанс в одн опользовательс ком режиме, перемонтировав каталог в режиме чтения
и записи. В системе Linux этот трюк обычно в ыпол няет команда
# mount -о rw , remount /
В системах FreeB S D возможность повторного подключен и я я вляется неявной , когда вы
повторяете монтирование, но н еобходимо явно указать исходное устройство. Например,
# mount - о rw /dev/qpt/rootfs /
RHEL
Однопользовательский режим в системах Red Hat и CentOS нем ного более
агресс и ве н , чем обычно. К моменту достижения командной строки эти си­
сте м ы уже п ытались п одключить все локальные файловые систе м ы . Хотя
это умолчание обыч н о полезно, при несnравной файл овой системе могут
возникнуть проблемы . В этом случае можно загрузиться в аварийном режи­
ме, добавив команду systemd . uni t=emergency . target к аргуме нтам ядра
из загрузчи ка {обычно G RU B) . В этом режиме локальные файловые с исте­
мы н е монтируются и запускается всего несколько основных служб.
m Для получения дополнительной информаци и о файловых системах и их монтировании см.
главу 5.
Команда fsck запускается во время обычной загрузки для проверки и восстановле­
н и я файловых с исте м . В зависимости от того, какую файловую с истему вы используе­
те для корневого каталога, вам может потребоваться запустить fsck вручную, когда вы
подключаете с истему в однопол ьзовательском или аварийном режим е . Для получ е н ия
более подробной и нформации о команде fsck обратитесь к разделу 20. 1 0.
Однопользовательский режим - это просто точка на обычном пути загрузки , поэтому
можно выйти из однопользовательской оболочки, введя команду exi t или нажав клави­
ш и < Ct rl + D > , чтобы продолжить загрузку. Вы также можете н ажать клавиши < Ct rl + D >
в момент запроса пароля, чтобы полностью обойти однопользовательский режим.
Однополь зовател ь ск и й режим в с истеме FreeBSD
Система Free B S D включает одноnользовател ьский вариант в меню загрузки.
1.
2.
3.
4.
B o o t Mul t i U s e r [ En t e r )
Boot S ingle U s e r
E s c a p e t o l o a d e r p r omp t
Reboot
Часть 1. Основы администрирования
1 00
Op t i on s
5 . K e r n e l : d e f a ul t / ke rn e l ( 1 o f 2 )
6 . C o n f i g u r e B o o t Op t i o n s . . .
Одна приятная особен н ость однопользовател ьскоrо режима в Free BS D заключается
в том , что он спрашивает, какую проrрам му ис пользовать в качестве оболочки. П росто
нажм ите < Enter> для оболоч ки /bin/ sh.
Выбрав вариант 3, вы переЙдете в среду командной строки заrрузоч ного уровн я , реа­
лизованную финал ьн ы м загрузчи ком Free B S D loader.
Однополь зов ательски й режим с з а г ру зч и ком G R U B
В системах, испол ьзующих менеджер systemd, можно заrрузиться в режиме
восстановле н и я , добавив команду systemd . uni t=rescue . target в коне ц
существующей строки ядра Linux. Чтобы измен ить параметры заrрузки, вы­
дел ите нужное ядро на заставке G R U B и нажмите клавишу <е>. Аналогично
для загрузки в авари йном режи м е испол ьзуйте команду sys temd . uni t=
emergency . target.
Вот пример ти пич ной конфигурации:
l i nux l 6 /vml i nu z - 3 . 1 0 . 0 - 2 2 9 . e l 7 . x 8 6_ 6 4 r o o t = / dev /mapp e r / rhel_rhe l - r o o t
r o c r a s h ke rn e l = a u t o rd . lvm . l v= r h e l _ r he l / swap rd . lvm . lv= rhel_rh e l / r o o t
r h g b qu i e t LANG= en_U S . UT F - 8 s y s t e md . uni t = r e s cue . t a rg e t
Для того чтобы запустить систему после внесения изменен и й , нажм ите <Ctrl+X>.
В ос становл е ние облачн ых си стем
И з-за п р ироды облач н ы х с исте м н е возможно под кл юч ить м о н итор ил и U S В­
накопитель при возникнове н и и проблем с загрузкой . Облач ные провайдеры делают все
возможное , чтобы облегчить решение проблем, но основные ограничения остаются .
W Дл я более ши рокого ознакомления с облач ными вычислениями см . главу 9 .
Резервные коп и и важны для всех систе м , н о для облач н ы х серверов сделать такую
копи ю очень просто. П ровайдеры взимают допол нительную плату за резервные копии,
но они н едороги. Чаще создавайте образы (snapshot) и вы всегда будете и меть разум н ы й
систе м н ы й образ, чтобы вернуться к н е м у в короткие сроки.
С философской точк и зрения вы, вероятно, ошибаетесь, есл и ваш им облачн ы м сер­
верам требуется отладка при загрузке . Н е исправные физические серверы можно срав­
н ить с домаш н и м и животн ы м и , которых лечат, есл и они заболели , но больной круп ­
н ы й рогатый скот не лечат, а просто заби вают. Ваш и облачн ые серверы - это крупн ы й
рогат ы й с кот; есл и о н и плохо работают, зам е н ите и х заведомо рабоч и м и коп и я м и .
Испол ьзование этого подхода помогает не только избежать критических сбоев, н о и об­
легчает масштабирование и м и rрацию системы.
Тем не м е н ее вам н еизбежно придется попытаться восстановить облачн ы е систе м ы
ил и диски, поэтому м ы кратко обсудим этот процесс н иже.
В рамках AWS однопользовател ьские и аварийные режим ы недоступны. Однако файловые
системы ЕС2 могут быть подключен ы к другим виртуальным серверам , если они поддержи­
ваются устройствами Elastic Block Storage ( EAS). Эrо значение по умолчани ю установлено
для большинства экзем пляров ЕС2, поэтому вполне вероятно, что при необходимости вы
Глава 2. Загрузка и системные демоны
1 01
сможете использовать этот метод. Понятно, что это похоже на загрузку с U S В-накопителя,
так что можно сориентироваться на загрузочном диске физической системы.
Вот что надо сделать.
1 . Запустите новый экзем пляр в области видимости экзем пляра, с которым возник­
л и п роблемы. В идеале этот экзе м пляр восстановления должен запускаться с од­
ного и того же базового образа и использовать тот же тип экзе м пляра, что и неис­
правная система.
2 . Остановите проблематичный экзе м пляр. ( Но будьте осторож н ы , чтобы не вы пол ­
н ить операцию t e rтi n a t e , потому что она удаляет образ загрузочного диска.)
3 . С помощью веб- консол и AWS или CLI отсоедин ите том от проблемной систем ы
и присоедин ите его к системе восстановления .
4 . Войдите в систему восстановления. Создайте точ ку монтирования и смонтируйте
том , а затем сделайте все , что необходимо для устране н и я пробл е м ы . Затем от­
ключите том . (Не выходит? Убедитесь, что вы не н аходитесь в одном из каталогов
этого тома.)
5 . В консол и AWS отсоедин ите том от экзе м пляра восстановл е н и я и подкл юч ите
его к п роблемати чному экземпляру. Запустите п робле матич н ы й экзе м пляр и на­
дейтесь на лучшее.
Дроплеты компании DigitalOcean предлагают консоль с поддержкой VN C , к которой
можно получить доступ через И нтернет, хотя использовать неб-приложения в некоторых
браузерах довольно неудобно. Компания DigitalOcean н е предоставляет возможности от­
соединить устройства хране ния и перенести их в систему восстановле ния, как это делает
Amazon . В место этого большинство систем н ых образов позволяют загружаться с ал ьтер­
нативного ядра восстановления.
Чтобы получ ить доступ к ядру восстановления, сначала откл юч ите дроплеты , а затем
смонтируйте ядро восстановления и перезагрузитесь. Если все пойдет хорошо, виртуаль­
ный терминал предоставит вам доступ к однопользовател ьс кому режиму. Более подроб­
н ы е инструкции для этого процесса доступны на сайте d i g i t a l o c e a n . сот.
П робл е м ы с загрузкой в экземпляре Google Compute Engi ne сначала должны быть
исследованы путем изучения и нформации о последовательном порте экзе м пл яра:
$ gcloud compute instances get- serial -port-output экземпляр
Такую же информацию можно получить через веб-консоль G C P.
П роцесс перемеще н ия диска, аналоги ч н ы й описанному в ы ш е дл я облака Amazon,
также доступен в Google Compute Engine. В ы используете CLI для удал е н и я диска из
н еработающего экзем пляра и загрузки нового экзе м пляра, которы й монтирует диск
в качестве дополн ительной файловой системы. Затем можно запускать проверки файло­
вой систе м ы , изменять параметры загрузки и при необходимости выбирать новое ядро.
Этот процесс подробно описан в докуме нтации Google по адресу c l o u d . g o o g l e . сот/
c oтpu t e / do c s / t r o uЬ l e s h o o t i n g .
Глава
3
Управление д ос т уп ом
и привилегии
суперпользователя
Эта глава посвящена контролю доступа, под которым , в отличие от кон цепции без­
опасности , мы подразумеваем механ изм принятия реш е н и й , связанных с безопасно­
стью, реализуемый ядром и его делегатами. В главе 27 , посвященной безопасности , рас­
сматривается более общий вопрос о том , как настроить систему или сеть, чтобы свести
к м и нимуму вероятность нежелательного доступа злоум ы шленников.
Контроль доступа - это область активных исследований, которая уже давно я вляется
одной из главных проблем разработки операционных с исте м . За последнее десятилетие
мир U N I X и Liпux пережил кембрийск и й взр ы в новых возможностей в этой области .
П ервич н ы м драйвером этого всплеска стало появление АРl - интерфейсов ядра, которые
позволяют сторонни м модулям увеличивать или заменять традиционную систему управ­
ления доступом U N IX. Этот модульный подход создает м ножество новых возможностей ;
контрол ь доступа теперь так ж е открыт для изменений и экспериментов, как и любой
другой аспект U N IX.
Тем не менее традицион ная система остается стандартом U N IX и Liпux, и она подхо­
дит для большинства установок. Даже системные адм и нистраторы , которые хотят вы йти
на новые рубежи , должны овладеть основами .
Часть 1. Основы администрирования
1 04
3 . 1 . СТАНДА РТНОЕ УПРАВЛЕНИЕ ДОСТУПОМ в U N IX
Стандартная модел ь контроля доступа в системе U N IX в течение десятилети й прак­
тически не измен илась. С н екоторы м и усовершенствованиями она по-прежнему я вля­
ется стандартной дл я распространенных дистрибутивов операционн ы х с исте м . Схема
соответствует таким основны м правилам .
•
Решения по управлению доступом зависят от того, какой пользователь п ытается
в ы пол н ить операцию или в не которых случаях от членства этого пол ьзователя
в группе U N IX.
•
Объекты (например, файл ы и процессы) имеют владельце в. Владельцы имеют ши­
роки й (но не обязательно неогран ичен н ый) контроль над своим и объектами.
•
Вы являетес ь владельцам и создаваем ых вами объектов.
•
Специал ьная учетная запись пользователя под названием root может действовать
как владелец л юбого объекта.
•
Тол ько пол ьзовател ь root может выпол н ять особо важн ые адм и н истративные
операции. 1
Некоторые систе м н ы е вызовы ( например, settimeofday) ограничен ы при вилегия­
м и пользователя root; реал изация просто проверяет подл и н ность те кущего пол ьзова­
теля и отклоняет операцию, есл и пользователь не является привилегированным (root) .
Другие систе м н ы е вызовы ( например, k i l l ) реализуют различные выч ислен и я , кото­
рые включают как сравнение прав собственности , так и проверку специальных услови й
для пол ьзователя root. Н аконец, файловые систе м ы и меют свои собственные системы
управл е н и я доступом , которы е они реал изуют в сотрудничестве с уровнем ядра VFS .
О н и , к а к правило, более слож н ы , чем эл е ме нты управления доступом в других местах
ядра. Например, файловые системы гораздо чаще используют групп ы U N IX для контро­
ля доступа.
Усложнение этой картины состоит в том , что ядро и файловая с истема тесно пере­
плетаются. Например, вы управляете и общаетесь с большинством устройств через фай­
л ы , которые п редставляют и х в каталоге /dev. П оскол ьку файл ы устройств я вляются
объектами файловой с исте м ы , они подчиняются семантике управления доступом к фай ­
ловой системе. Ядро испол ьзует этот факт в качестве основной формы контроля доступа
для устройств.
m Дополнительную и нформацию о файлах устройств см. в разделе 5.4.
Ко нтр ол ь д о сту па к ф а й л о в о й с и сте ме
В стандартной модели каждый файл имеет как владельца, так и группу, иногда назы­
ваемую " групповым владельцем " . Владелец может устанавливать разрешения для файла.
В частности, владелец может установить их настолько о граничительно, что н и кто другой
не сможет получить к нему доступ. М ы бол ьше говори м о разрешениях файлов в главе 5
(см. раздел 5 . 5 ) .
1 И мейте в виду, что м ы здесь описываем оригинальный диза й н с истемы контр оля доступа. В наши
дни не все эти утвержден и я остаются истинными в буквальном смысле. Напри мер, процесс Liпux,
который имеет соответствующие возможности (см . раздел 3 . 3 ) , теперь может вы полнять н екоторые
опера ц и и , которые ранее были огра н и чены только компетенцией пользователя root.
Глава 3. Управление доступом и привилегии суперпользователя
1 05
Хотя владельцем файла все гда я вляется оди н человек , многие могуr быть владел ьца­
ми файлов, если они все являются частью одной групп ы . Группы традиционно опреде­
ля ются в файле /etc/group, но в настоящее время и нформация о группе часто сохра­
н яется в системе сетевых баз данных, такой как LDAP; для получения допол нительной
и нформации см. главу 1 7 .
m Для получения дополнительной и нформации о группах см. раздел 8 . 5 .
Владелец файла определяет, что могут сделать с н им чле н ы групп. Эта схема позволя­
ет дел иться файлами между членами одного и того же проекта.
Владел ьца файла можно определить с помощью команды l s - 1 :
$ l s - 1 �qarth/ todo
- rw- r - - - - - 1 g a r t h s t a f f 1 2 5 9 Мау 2 9 1 9 : 5 5 / U s e r s / g a r t h / todo
Дан н ы й файл п р инадлежит пользовател ю garth и группе s taf'f'. Буквы и тире
в первом столбце с и мволизируют разрешения на файл ; дл я получ е н и я подробной и н ­
формации о том , как декодировать эту и нформацию, обратитесь к разделу 5 . 5 . В данном
случае коды означают, что пользователь garth может ч итать или записывать файл и что
чле н ы групп ы s taf'f' могут его прочитать.
m Дополнительную и нформацию о файлах passwd и qroup см. в главе 8 .
И ядро, и файловая с истема отслеживают владельцев и груп п ы как ч исла, а не как
те кстовые и мена. В подавляющем больши нстве случаев идентификацион н ые номера
пол ьзователе й ( короткие идентификаторы U I D) сопоставляются с именами пользовате­
лей в файле /etc/passwd, а идентификацион ные номера груп п ( G I D ) сопоставляются
с и менами групп в файле /etc/ group. (Для пол учения и нформации о более сложных
ВОЗМ ОЖН ОСТЯХ с м . главу 1 7. )
Текстовые и м е н а , соответствующие иде нтификаторам U I D и G I D , о пределяются
только для удобства пол ьзователей систе м ы . Когда команды , такие как l s , должны ото­
бражать и нформацию о владел ьце в удобочитаемом формате, они и щуr каждое имя в со­
ответствующем файле ил и базе дан ных.
Вл а ден ие п р оц есс о м
Владелец процесса может отправлять сигналы процесса (см. раздел 4.2), а также мо­
жет пон изить (повысить) приоритет план и рования процесса. П роцессы н а самом деле
имеют нескол ько идентификаторов, связан н ых с н и м и : реал ьн ы й , текущи й и сохранен­
н ы й U I D ; реальн ы й , текущий и сохране н н ы й G I D; а в системе Linux - " идентифи катор
файловой систем ы " , которы й испол ьзуется тол ько для определения разрешений доступа
к файлам . Вообще говоря , реальные номера используются для учета (и в настоящее вре­
мя в знач ительной степени я вляются рудим ентар н ы м и ) , а текущие номера - для опре­
дел е н ия разрешений доступа. Реальные и текущие номера, как правило, оди наковы.
Сохраненные U I D и G I D - это парковочн ы е м еста для идентификаторов, которые
в настоя щее врем я не испол ьзуются , но остаются доступн ы м и для вызова из п роцесса.
Сохране н н ые идентификаторы позволяют программе повторно входить в привилегиро­
ван н ы й режим работы и выходить из него ; эта предосторожность умен ьшает риск не­
преднамеренного неправильного поведения.
Иде нтификатор U I D файловой систе м ы обычно описывается как деталь реал иза­
ции сетевой файловой систе м ы N FS. Обычно он совпадает с текущим идентификато­
ром U I D .
Часть 1. Основы администрирования
1 06
Учет ная з а п ис ь супе рп ол ьзователя root
Учетная зап и с ь root
-
это за п и с ь все м о гуще го адм и н истративного пользователя
U N IX. Она также назы вается учетной зап и с ь ю суперпол ьзователя , хотя фактичес кое
имя пол ьзователя
-
root ( коре н ь) .
Определ я ю щ е й характеристи кой учетной зап и с и root я вляется е е иде нтифи катор
U I D , равн ы й О. Н и что не ме шает вам изменять и м я пол ьзователя в этой учетной зап и с и
ил и создавать допол н ител ьные учетные записи , идентифи каторы U I D которы х рав н ы О ;
однако это плохие иде и . 2 Такие и з м е не н и я обы ч н о создают н епреднамерен н ы е наруше ­
н ия безопасн ости с исте м ы . О н и также создают путаницу, когда други м л юдя м приходит­
ся и меть дело со стран н ы м с п особом настройки вашей систе м ы .
W Подробнее о системе N FS см . в главе 2 1 .
Традиционная с и сте ма U N I X позволяет суперпол ьзовател ю (т. е . л юбому процессу,
для которого текущи й иде нтификатор U I D равен О) выпол н ять л юбую допустимую опе­
рацию для л юбого файла или процесса.3
П еречислим н е которые п р и м еры привил е гирова н н ы х операц и й .
•
Создание файлов устройстn.
•
Установка с исте м н ы х часо в .
•
Повыш е н и е л и м итов испол ьзования ресурсов и приоритетов процессов.
•
И з ме н е н и е и м е н и хоста систе м ы .
•
Настрой ка сете вых и нтерфе йсов.
•
Открытие при вилегирован н ых сетевых портов (с номера м и м е н ьш е 1 024) .
•
Выключение систем ы .
П ри м ером п ол н омоч и й супе рпол ьзовател я я вляется с пособн ость п р и н адлежащего
е м у процесса изме нять свои иде нтификаторы U I D и G I D . П р и м ером может служить
програ м м а входа в с исте м у loqin и ее эквивале нты в в иде графического пол ьзовател ь­
с кого и нтерфейса ; процесс , котор ы й запра ш и вает ваш парол ь при входе в с исте му, из­
начально запускается с правами пользователя root. Есл и введе н н ы й вами пароль и имя
пол ьзователя я вл я ются закон н ы м и , то программа входа в с истем у l ogin изменяет свои
U I D и G I D на ваш и U I D и G I D и запус кает среду оболочки ил и графический пол ь­
зовател ьск и й и нтерфей с . Как тол ько процесс root и з м е н ит с воего владел ьца и станет
обычн ы м пользовател ьским процессом , он не с может восстановить п режн ее при вил е ги­
рован н ое состоя н и е .
Установка ф ла гов setuid и setgid
Традицион н ы й контрол ь доступа U N IХ дополняется системой подстановки идентифи­
каторов, которая реализована ядром и файловой с истемой, взаимодействующи м и между
собо й . Эта схе ма позволяет запускать специал ьно выдел е н н ые испол няемые файлы с по­
выше н н ы м и разрешения м и , обычно с правами пользователя root. Это дает возможность
разработч икам и ад м и н истраторам создавать структурирова н н ы е способ ы , с помощью
которых непривилегированные пол ьзовател и могут выпол нять привиле гирова н н ы е опе­
раци и .
2Дже н н и н Таунсенд, одна из наш и х рецензентов, прокомментировала это так : " Настолько плохие
иде и , что я боюсь даже упоминать их, чтобы кого-нибудь не спровоцировать" .
3 3десь кл юче вое слово - "доп устимая " . Не которые операци и (например, выпол н е н и е файла,
для которого не устаноw�ен бит разрешения выпол нения) запрещены даже суперпол ьзователю.
Глава 3 . Управление доступом и привилегии суперпользователя
1 07
Когда ядро запус кает и с п ол н я е м ы й файл с установл е н н ы м и бита м и разреш е н и я
s e t u i d или s e t g i d , о н о изменяет текущий идентифи катор U I D ил и G I D результиру­
ющего п роцесса на U I D или G I D файла, содержащего образ програм м ы , а н е на U I D
и G I D пол ьзователя , который в вел ком анду. Так и м образо м , привилег и и пол ьзователя
рас п ростран я ются только на выпол н е н и е этой конкретной команды .
Например, пол ьзователи должн ы и м еть возможность изменять с вои парол и . Однако,
поскольку парол и (традицион но) хранятся в защищенном файле /etc/ma s ter . pas swd
ил и / e t c / shadow , пол ьзователя м н ужна команда pas swd, чтобы обесп е ч ить досту п .
Команда pas swd проверяет, кто ее запус кает, и соответстве н но н астраи вает с вое пове ­
де н и е : пол ьзовател и могут изм е н ять только собствен н ые парол и , но пол ьзователь roo t
может изменять л юбой парол ь.
П рограмм ы , запус каем ы е с флагом s e t u i d , особен н о для пользователя root, могут
создавать пробл е м ы безопасн ости . Команды с установл е н н ы м флагом s e t u i d , постав­
ляемые с системой , теоретически защище н ы ; однако в прошлом уже были обнаружен ы
бре ш и в с исте ме безопасности и , н есомнен но, н екоторые будут обнаружен ы в будуще м .
С а м ы й в е р н ы й с п особ м и н и м и з ировать кол и чество проблем , с в я за н н ых с фла ­
гом s e t u i d ,
-
м и н и м и зировать кол и чество программ , запус кае м ы х с эти м флаго м .
П одумайте дважд ы , прежде чем испол ьзовать програ м м н ое обес пече н и е , которое долж­
но устанавл и вать флаг s e t u i d , и избегайте п р и м е н е н и я фл ага s e t u i d в ваш е м соб­
стве н ном домаш н е м програм м ном обеспеч е н и и . Н и когда н е испол ьзуйте фла г s e t u i d
в п рограммах, которые не бьm и написаны специально дл я этого.
Вы можете откл юч ить установку флаго в s e t u i d и s e t g i d в отдель н ы х файловых
с истемах, указав параметр n o s u i d при их монтирован и и . Рекомендуется испол ьзовать
этот параметр в файловых с истемах, которые содержат дома ш н ие каталоги пол ьзовате­
лей или монтируются из менее надежн ых адми нистративных доменов.
W До полн ител ьную и нформаци ю о возм ожностях м онти рования файловой с и сте м ы
см. в разделе 20 . 1 0 .
3.2. УПРАВЛЕНИЕ У ЧЕТНОЙ ЗАПИС Ь Ю ROOT
Доступ к уч етной записи root н еобходим для ад м и н истрирова н и я систе м ы . Кро ме
того, он представляет собой точ ку опоры дл я с исте м ы безопас ности . Правил ьное ис­
пол ьзование этой учетной записи является решающ и м навыком .
В ход в учетную з а пись root
П оскольку root - это просто еще один пол ьзовател ь, бол ьшинство с истем позволя­
ют вам напрямую входить в учетную запись root. Однако это оказы вается плохой иде ­
е й , поэтому в с истеме UЬuntu такие действия запрещен ы по умолчани ю .
Во- первых, учетн ые записи root н е содержат и нформации о том , какие операции вы­
пол нялись с правами root. Это плохо, когда вы пон имаете , что вчера испортили что-то
в 3:00 утра и не можете вспом н ить, что именно вы и зм е н ил и ; это еще хуже , если доступ
бьт несанкцион ирова н н ы м , и вы п ытаетесь выяснить, что нарушитель сделал с вашей си­
сте мой . Другим недостатком является то, что с ценарий входа в систе м у не содержит запи ­
сей о том , кто на самом деле выполняет данную работу. Если у нескольких пользователей
есть доступ к учетной записи root, вы не сможете определить, кто ее использовал и когда.
По этим прич и н ам бол ьш и нство с истем позволяют откл ючать вход в учетн ые записи
roo t на терм и н алах, через окон н ы е с исте м ы и по всей сети - везде , кроме с исте м н о й
1 08
Часть 1. Основы администрирования
консол и . М ы преддагаем вам испол ьзовать эти возможности . Ч тобы узнать, как реал и ­
зовать эту пол итику в вашей кон кретной системе, с м . раздел 1 7 . 3 .
Есл и у пол ьзователя r o o t есть парол ь (т. е . учетная зап ись r o o t не откл ючена,
с м . н иже ) , этот парол ь должен быть очень сложны м . Для получе ния допол нител ьных
комментариев относительно выбора пароля см. раздел 27.3.
Кома нда su: замен а идентификатора п ол ьзовател я
Л уч ш е получать доступ к учетной записи root с помощью команды su. При вызове
без аргументов она в ыдает приглашение на ввод пароля пользователя root, а затем за­
пус кает оболочку с при вилегированн ы м и правами. Эти права будут сохраняться , пока
в ы не заверш ите работу (нажав комбинацию клавиш < Ct rl + D > ил и выпол н и в команду
exi t). Команда su не фиксирует действия , производимые привиле гирова н н ы м пол ьзо­
вателем, но добавляет запись в журнал ьн ы й файл с указан ием , кто и когда вош ел в си­
стему под именем root.
Команда su способна также подставлять вместо имени root имена других пол ьзова­
телей. И ногда единстве н н ый способ помочь пол ьзователю в решен и и пробл е м ы - во­
йти с помощью команды su в е го среду и воспроизвести ситуацию.
З ная чей-л ибо пароль, можно непосредственно зарегистрироваться в системе под е го
именем, введя команду su - имя_ поль з о в а т ел я. В ответ будет выдан запрос на ввод
пароля. При использован и и в качестве кл юча команды su дефиса ( - ) оболочка перейдет
в режим регистрации .
Точная реализация этого режима зависит о т конкретной оболочки , но обычно в этом
режиме меняются количество и имена файлов запуска, сч итываемых интерпретатором .
Например, в режиме регистрации оболочка bash считывает файл "/ . bashyrofile, а вне
этого режима - файл " / . bashrc. При диагностике проблем конкретного пользователя ре­
жим регистрации позволяет максимально точно воспроизвести среду, в которой он работал.
В одних с истемах парол ь root позволяет регистрироваться с помощью команд su
или login под любым именем. В других нужно сначала стать пользователем root, при­
менив в явном виде команду su, а затем с помощью этой же команды перейти в другую
учетную запись. В таком случае вводить пароль не потребуется.
Рекомендуем сделать правилом при вводе команды указывать пол ное имя , например
/Ьin/ su или /usr/Ьin/ su, а не просто su. Это послужит определен ной защитой от тех
програ м м с и м е н е м su, которые преднамеренно был и измене н ы злоум ышле н н и ко м ,
планировавшим собрать хорош и й " урожай " паролей4•
В не которых с исте мах, чтобы испол ьзовать команду su, н еобходимо быть членом
груп п ы whee\.
Команду su в знач ител ьной степени может замен ить програм ма sudo (см. следую­
щий раздел) , саму же команду su лучше всего оставить ддя авари йных ситуаций.
П рограмма sudo: огра ниченный ва риа нт кома нды su
Без одной из усовершенствован ных систем управления доступом, описанных в раз­
деле 3.4, трудно разреш ить кому-то выполн ять какую-то задачу (например, резервн ые
4По аналогичной причи н е настоятельно рекомендуем не вкл ючать зап ись " . " (текущий каталог)
в пере м е нную p a th ( которую можно увидеть, н абрав команду echo $ РАТ И ) . Несмотря на
очевидное удобство, подобная конфи гурация п р и водит к тому, что можно н е п реднамере н н о
зап устить "специал ьную" верси ю какой - н и будь систе м ной команды, которую з.лоумы ш ле н н и к
оставил в качестве приманки . Пользователю root следует бьrrь бдительн ы м вдвой не.
Глава 3. Уп равление доступом и привилегии суперпользователя
1 09
коп и и ) , не предоставляя этому пользователю права свободно запускать с истему. И если
учетная запись root используется нескольки м и адми нистраторам и , на самом деле у вас
будет только смутное представление о том , кто ее использует или что они сделали.
Н аибол е е ш ироко ис пол ьзуе м ы м ре ш е н ие м этих пробл е м я вл я ется программа
под названием sudo , которая в н астоящее врем я поддерживается Тоддом М иллером
(Todd M iller) . Эта программа работает на всех наших иллюстративных с истемах и также
доступна в форм е исходного кода на сайте s u do . w s . М ы рекомендуем использовать ее
в качестве основного метода доступа к учетной записи root.
П рограмма sudo принимает в качестве аргуме нта командную строку, выполняемую
с правами root (или правами любого другого ограниченного пользователя). П рограм ма
sudo проверяет файл /etc/ sudoers (/usr/ local /etc/sudoers в системе FreeBSD), в ко­
тором перечислены люди, имеющие разрешение использовать программу sudo и команды,
которые и м можно запускать на каждом хосте. Если предЛагаемая команда разрешена, про­
грамма sudo запрашивает собственный пароль пользователя и выполняет команду.
В течение пяти минут после запуска программа sudo позволяет выполнять команды без
обязательного введения пароля (продолжительность этого периода можно менять) , после
чего программа sudo перейдет в режим ожидания. Этот тайм-аут служит скромной защитой
от пользователей с привилегиям и sudo, которые оставляют терминалы без присмотра.
Программ а sudo ведет журнал выполненных команд н ых строк, регистрирует хосты,
на которых они выполнялись, людей , которые их выполнял и , каталоги , из которых они
был и выпол н е н ы , и вре м я , в которое о н и были в ы пол н е н ы . Эта и н формация м ожет
быть зарегистрирована в систе мном журнале или помещена в файл по вашему выбору.
Мы рекомендуем испол ьзовать м еханизм Syslog дЛЯ пересылки записей журнала на без­
опасный центральны й сервер.
Запись журнала для выпол н ен ия команды sudo /Ьin/cat /etc/ sudoers пользо­
вателя randy может выглядеть так:
D e c 7 1 0 : 5 7 : 1 9 t i g g e r sudo : randy : T T Y= t t yp O ; PWD= / t i g g e r / u s e r s / r andy ;
U S E R= r o o t ; COММAN D= /bi n / c a t / e t c / sudoe r s
Прим ер конфигурации
Файл sudo e r s разработан так и м образо м , что одн а версия м ожет испол ьзоваться
сразу на нескольких разных хостах. Вот типичный пример .
# D e f i n e a l i a s e s f o r ma chi n e s i n C S & P h y s i c s dep a r tmen t s
H o s t_Al i a s C S = t i gg e r , a n ch o r , p i pe r , moe t , s i g i
H o s t Al i a s P H Y S I C S = e p r i n c e , p p r i n c e , i c a r u s
# D e f i n e c o l l e c t i o n s o f commands
Cmnd_Al i a s DUMP = / s b i n / dump , / s Ь i n / r e s t o r e
Cmnd Al i a s WATCHDOG = / u s r / l oc a l / Ь i n /watchdog
Cmnd Al i a s S H E L L S = / Ь i n / s h , / Ь i n / da s h , / Ь i n / b a s h
# P e rmi s s i o n s
ma r k , ed
PHYS I C S = ALL
C S = / u s r / sЬ i n / t cpdump : PHYS I C S = ( op e r a t o r )
he rb
ALL = ( AL L ) ALL , ! SH E L L S
l ynda
% wh e e l
ALL , ! P HYS I C S = NOPAS S W D : WATC H DOG
DUMP
Первые два н абора строк определяют группы хостов и команды , которы е упоми­
наются в дальнейших спецификациях разре ш е н и й , включен ных в файл . Списки могут
быть включены буквально в с пецификации , но псевдонимы облегчают чте н ие и пони ­
ман ие файла sudoer s ; они также упрощают обновление файла в будуще м . Также воз-
Часть 1. Основы администрирования
110
можно определить псевдонимы для пользователей и групп пол ьзователе й , для которых
могут выпол няться команды .
m Дополнительную информацию о файле sysloq см. в главе 1 0 .
Каждая строка спецификации разрешений содержит следующую и нформацию.
•
П ользователи , к которым относится запись.
•
Хосты , на которые распространяется эта запись.
•
Команды, которые могут выпол няться указа н н ы м и пользователя м и .
•
Пользователи , которы м разрешается выпол н ять команды.
Пе рвая строка разре ш е н и й применяется к пол ьзователям ma r k и e d на маш и н ах
в группе P H Y S I C S ( e p r i n c e , pp r i n c e и i c a r u s ) . Встроен н ы й ком андны й псевдоним
ALL позволяет и м в ыпол н ять л юбую команду. Поскол ьку в круглых с кобках н е указан
сп исок пользователе й , программа sudo будет запускать команды с правами root.
Вторая строка разрешений позволяет пользователю h e r b запускать утилиту tcpdump
на машинах группы c s и команды вывода дампа н а машинах групп ы PHYS I C S . Однако
команды в ывода дампа могут выпол няться только с правами пол ьзователя o p e r a t o r ,
а н е суперпользовател я . Реал ьная командная строка, которую должен был б ы ввести
пользователь h e r b , выглядела бы так:
ubun t u $ sudo -u operator /usr / sbin/ dWDp Ou /dev/ sdal
Пол ьзователь l yn d a может запускать команды как л юбой пол ьзовател ь н а л юбой
машине, за исключ е н ие м того, что она не может запускать нескол ько общих оболочек.
Означает л и это, что пол ьзовател ь l yn d a действител ьно не имеет доступа к корневой
оболочке? Конечно, н ет:
ubun t u $ ер -р /bin/sh/tmp/ sh
ubunt u $ sudo / tmp/ sh
Вообще говоря, любая попытка разреш ить " все команды, кроме . . . " обречена на про­
вал , по крайней мере в тех н ическом с м ысл е . Те м не менее может о казаться целесоо­
бразным настроить файл sudoers таким образом, чтобы напомн ить о том , что вызывать
оболочку с правами root крайн е нежелател ьно.
Последняя строка позволяет пользователя м групп ы whe e l выполнять локальную ко­
манду watchdog с правами root на всех машинах, кроме e p r i n c e , p p r i n c e и i c a r u s .
Кроме того, для выполнения этой команды не требуется пароль.
Обратите в н и ма н ие на то, что команды в файле sudoers указа н ы с пол н ы м и име­
нами путе й , чтобы л юди не могл и выполнять с вои собствен н ые програм мы и сценарии
с правами root. Хотя в вышеприведе нном примере это не показано, можно указать ар­
гументы, допустимые для каждой команды .
Ч тобы вручную изменить файл sudoers , используйте команду vi sudo, которая про­
веряет, что никто другой не редактирует файл, вызывает для него редактор (vi или любой
редактор, указанный вами в перемен ной среды E D I TOR) , а затем проверяет синтаксис от­
редактирован ного файла перед его установкой. Этот последний шаг особенно важен , по­
тому что н еправильный файл sudoers может помешать вам снова исправить ошибку.
Преимущества и недостатки программы sudo
Использование программы sudo и меет следующие преимущества.
•
Благодаря ведению журнала команд значительно улучшается учет.
•
П ол ьзователи могут выпол н ять определ е н н ые задачи , не имея неогран иче н н ых
прав roo t.
Глава 3. Управление доступом и привилегии суперпользователя
111
•
Реальны й пароль root может быть известен тольк о одному или двум людя м . 5
•
Использование программ ы sudo быстрее, чем вызов su или вход в систему с пра­
вами root.
•
П ривилегии можно отменить без н еобходимости изменения пароля пользователя
root.
•
Поддерживается канонический список всех пользователей с правами root.
•
Умен ьшается вероятность того, что корневая оболо ч к а останется без присмотра.
•
Один файл может управлять доступом ко всей сети.
У программы sudo есть и несколько недостатков. Хуже всего то, что любое н аруше­
ние безопасности личной учетной записи sudoer мож ет быть эквивалентно нарушению
самой учетной записи roo t. В ы не можете сделать м ногого, чтобы п ротивостоять этой
угрозе , кроме как предостеречь пользователей, переч исленн ых в файле sudoers , чтобы
он и защитил и свои учетн ые записи , поскольку они будут иметь учетную запись root. В ы
также можете регулярно запускать взломщик паролей Дll Я п ол ьзователей, пер е ч и сле н ­
н ых в sudoers , чтобы убедиться, что они выбрали пра в ил ь ны е пароли . Все комментар ии
п о выбору пароля с м . в разделе 2 7 . 3 .
Регистрацию команд в программе sudo можно ле г ко обойти с помощью таких трю­
ков, как временный выход в оболочку из разрешенной программ ы , или к оман д ы sudo
sh и sudo su. (Такие команды отображаются в журналах, поэтому вы по крайней мере
узнаете , что они бьu ш запуще н ы . )
Программа sudo и расширенный контроль доступа
П ро грамме sudo как способ разделения привилегий корневой учетной записи пре­
восходит многие из систем управления доступом , оп и с а н н ы х в разделе 3.4.
•
Вы точно определяете , как будут разделены при ви л е ги и Ваше подразделение мо­
жет быть более грубы м или более тонким, чем привилеги и , определенн ые ДllЯ вас
с помощью готовой системы.
•
•
П ростые конфигурации - самые распространенные - п росты в настро йке, обслу­
живани и и пониман ии.
П рограмм а sudo работает на всех с истемах U N lX и Linux. Вам н е нужн о беспо ко
иться об управлен и и различными решениями на разных платформах.
В ы можете использовать оди н файл конфигурации во всей орган изации .
•
Вы бесплатно получаете качественные протокол ы .
•
.
-
Поскольку система уязви ма для катастрофическо й ком промета ци и , есл и корневая
учетная запись будет взломана, основны м недостатком контроля доступа на основе про­
грамм ы sudo я вляется то, что потенциал ьная поверх н о ст ь атаки расш иряется и распр о ­
страняется на учетные записи всех адми н истраторов.
П рограмма sudo хорошо работает как инструмент благонамере н н ых администрато­
ров, которым необходим общий доступ к привилегиям roo t. Она также отлично под­
ходит для того, чтобы остальные пользователи могли в ыпол н ить н ес кол ько конкретных
операци й . Несмотря на синтаксис конфигурации, кото р ы й предполагает иное, програм­
ма sudo, к сожалению, не является безопасным спосо бом определить ограниченные об­
ласти автономи и или вынести определенные операции за пределы безопасной области.
W Для получения дополнительной информации о взломе пароля см. раздел 27. 5 .
1 Или даже н икому, если у вас есть правильная с и стема хране н ия паролей .
Часть 1. Основы администрирования
112
Даже не п ытайтесь испол ьзовать эти конфигурации. Если вам нужна эта фун кцио­
нальная возможность, луч ш е всего подкл юч ить одну из с истем управления доступом ,
описан ных в разделе 3 . 4.
Типи чная настройка
За м ногие годы система конфигурации sudo накопила м ного фун кци й . Она была
модифи ц ирована , чтобы учесть м н ожество необыч н ых ситуаци й и край н их случаев.
В резул ьтате текущая документация создает впечатление сложности , которое не обяза ­
тельно оправданно.
Поскольку важно, чтобы программа sudo была надежным и безопасным и нструмен­
том , естественно задаться вопросом , можете л и вы подвергать свои систе м ы допол н и ­
тельному риску, если н е испол ьзуете е е рас ш иренные фун кции и не устанавливаете пра­
вильные значения дпя всех параметров. Ответ: нет.
90% содержимого файла sudoers выглядит примерно так:
U s e r Al i a s
ADM I N S
ADM I N S = a l i ce , ЬоЬ , cha r l e s
AL L = ( AL L ) ALL
Это совершенно респектабельная конфигурация , и во м ногих случаях нет необходи­
мости ее усложнять. М ы упом и нали несколько допол н ительных функци й , которые вы
можете испол ьзовать в следующих разделах, но все они являются и нструментами дпя ре­
ш е н и я пробл е м , которые полезны дпя конкретн ых с итуаций . Для общей надежности
больше н ичего н е требуется .
Управл ение окружением
Многие команды проверяют значения перемен н ых окружения и изменяют свое пове­
дение в зависимости от того, что они находят. В случае, если команды выполняются с пра­
вами root. этот механизм может быть полезным и многообещающи м способом атаки.
Например, допустим, что несколько команд запускают программу, указан ную в пере­
менной окружения E D I TOR, дпя редактирования текстового файла. Если эта переменная
указывает на вредоносную программу хакера вместо текстового редактора, вполне веро­
ятно, что в конечном итоге вы запустите эту программу с правами root.6
Чтобы минимизировать этот риск, поведение программ ы sudo по умолчанию закл ю­
чается в передаче только м и н имал ьного, дезинфицированного множества пере м е н н ых
окружен ия дпя команд, которые она запускает. Если вам нужны дополн ител ьные пере­
менные окружения , которые нужно передать, вы можете их перечисл ить, добавив в спи­
сок env_ keep файла sudoers . Например, строки
Defaul t s
De f a u l t s
env_ k e e p += " S SH_AUT H_S OC K "
e n v_ k e e p += " D I S P LAY XAUTHOR I ZAT I ON XAUTHOR I T Y "
сохраняют несколько переменных окружения, используе м ых Х Wi ndows и м еханизмом
пересылки ключей S S H .
Для разных пользователей или групп можно настроить разные списки e n v_ k e e p , н о
конфигурация быстро усложн ится. М ы предпагаем придерживаться единого универсаль­
ного списка и быть относ ител ьно консервативным с исключениями. которые вы закре­
пляете в файле sudoer s .
1' Пояс н и м , что сценарий в этом случае закл ючается в том , что ваша учетная за п и с ь была
скомпрометирована, но злоум ышленни к не знает ваш фактически й пароль и поэтому не может
напрямую запускать п рограмму sudo. К сожалению, это обычная ситуация, все, что требуется , это терми нальное окно, оставленное на м гновение без присмотра.
Глава 3. Уп равление доступом и привилегии супер п ользователя
113
Есл и н е обходимо сохр а н ить п е р е м е н ную среды , которая н е указа н а в файле
sudoers , ее можно явно установить в командной строке sudo. Н апример, команда
$ sudo ED ITOR=emacs vipw
редактирует файл с истем ного парол я с помощью редактора ema c s . Эта функция и меет
н екоторые поте нциальные огра н ичен и я, но они н е распространяются на пользователей ,
которые могут запускать все команды.
Программа sudo без паролей
Часто можно с сожален ием в идеть, что программа sudo н астроена н а в ы пол н е н ие
команды с правам и roo t без необходимости вводить п ароль. Для справки, эта конфи­
гурация задается с помощью кл ючевого слова N O PAS SWD в файле sudoers . Например:
ansiЫe
ALL
=
( AL L ) NOPAS SWD : ALL
# Н е д е л а й т е э то г о
И ногда это делается из-за лен и , но, как правило, основная причи н а - желание вы­
пол нить какие-то операции без санкции программы sudo . Наиболее распростране н н ы ­
м и случаям и я вляются удаленная настройка с помощью такой систе м ы , как AnsiЫe , или
запус к команд из планировщика cron.
W Дополнительную информацию о системе AnsiЫe см . в главе 23.
Излишне говорить, что эта конфигурация опасна, поэтому избегайте ее, если може­
те . По крайн е й мере о граничьте выпол н е н ие небезопасного доступ а к определен ному
набору команд, если сможете.
Другим вариантом , которы й хорошо работает в контексте удале нного выпол н ения ,
я вл яется заме н а введе н н ых вручную п аролей аутентификации с помощью программы
s sh - agent и перенаправленных S S Н - кл ючей. В ы можете настроить этот метод аутен ­
тификации с помощью модуля РАМ н а сервере , где будет выполн яться программа sudo .
Бол ьш инство с истем не в ключают модуль РАМ , которы й по умолчани ю испол ьзует
аутентификацию на основе S S H , но он легко доступе н . Найдите пакет pam_ s s h_ a g e n t _
auth.
Пересылка ключей S S H и меет собстве н н ы й н абор проблем безопасности , н о это ,
безусловно , луч ш е , чем пол ное отсутствие аутентификации.
Приорит ет
Вызов программ ы sudo потен циал ьно может быть рассмотрен нескол ькими запися­
м и в файле sudoers . Например , рассмотрим следующую конфигурацию:
U s e r Al i a s
U s e r Al i a s
ADM I N S
a l i c e , ЬоЬ , cha r l e s
a l i c e , ЬоЬ
MYS QL_ADMI N S
% wh e e l
MYSQL_ADM I N S
ADM I N S
ALL
ALL
ALL
=
=
( ALL ) ALL
( my s q l ) N O PAS SWD : ALL
( ALL ) NOPA S SW D : / u s r / s b i n / l o g r o t a t e
W Дополнительную информацию о конф и гураци и РАМ см. в разделе 1 7. 3 .
Здесь адм и н истраторы могут запус кать команду logrotate как обыч н ы й пользова­
тель без предоставления пароля. Адм инистраторы MySQ L могут выпол нять л юбую ко­
манду от имени пользователя mysql без пароля. Любой человек в группе whe e l может
выпол н ять л юбую команду под любым идентификатором U I D , но сначала он должен
пройти ауте нтификацию с помощью пароля.
Часть 1. Основы администрирования
114
Есл и пол ьзовател ь находится в гру п п е wh e e l , она потен циал ьно охваты вается каж­
дой из последних трех строк. Откуда вы знаете , какая из н их будет оп ределять п оведен и е
sudo?
П равило закл ючается в том , что sudo все гда подч и н яется последне й соответству­
ющей строке , п р и ч е м совпаде н и е определяется все м и четырьмя параметрам и : и м е н е м
пол ьзователя , хостом , и ме н е м целевого пол ьзовател я и командой . Каждый и з этих эле ­
ментов долже н соответствовать строке конфи гурац и и , ил и строка просто и гнорируется .
П оэтому искл юч е н ия NOPAS S W D должн ы соответствовать их более общ и м анал о гам ,
как по казано в ы ш е . Есл и бы порядок п осл едн и х трех строк был отм е н е н , то бед н о й
Ал и с е 7 п р ишлось бы вводить парол ь независимо о т того , какую команду sudo о н а п ыта­
лась бы запустить.
Пр огр амма sudo без терминала управления
П ом и м о п робл е м ы аутентифика ц и и без парол я , авто матическое в ы пол н е н ие про­
гра м м ы sudo (напри м е р , и з пла н и ровщика cron) часто происходит без обычного тер­
м и н ал а управле н и я . В этом н ет н и ч е го неправил ьного , н о это стран ная ситуация , кото ­
рую п рогра м м а sudo может обнаружить и отклон ить, есл и в файле sudoers вкл ючена
опция r e qu i r e t t y .
Этот параметр н е задается п о умолчани ю с точ к и зрен и я п ро гра м м ы sudo , н о н е ко­
торые дистрибутивы операцион н ых с истем вкл ючают е го в файл ы sudoers по умолча­
н и ю, поэтому его стоит п роверить и удал ить. Н айдите строку, и ме ющую вид
De f a u l t s
r e qu i r e t t y
и пом е н яйте в н е й значен и е н а п роти воположное:
De f a u l t s
! requi r e t t y
О п ция r e qu i r e t t y предлагает небольшую с и м вол ическую защиту от определ е н н ых
с ценариев атаки . Те м не менее ее ле гко обойт и , та к и м образом , она дает мало реал ьных
п р е и м уществ в плане безопасности. П о нашему м н е н и ю , опцию r e qu i re t t y н еобходи­
мо откл ючить, потому что это общи й источ н и к п робл е м .
Конфигурация sudo на уровне сайта
П ос кольку файл sudoers вкл ючает текущ и й хост в качестве подходя щего критерия
для строк конфи гура ц и и , вы можете испол ьзовать оди н главн ы й файл sudoers в адми­
н и страти вном дом е н е (т. е . в области , где гарантируется эквивалентность имен хостов
и у•1етн ы х записей пол ьзовател е й ) . Этот подход н е м н ого усложняет исходные настройки
sudoers , но это отл и чная идея по н ес кол ьким при ч и нам . Вам следует это попробовать.
Осно вное п р е и мущество этого подхода закл ючается в том , что нет н и какой тайн ы
в том , кто и какие и меет разре ш е н и я и дл я каких хостов. Все зап и сано в одном авто­
ритетн о м файле . Н а п р и м е р , когда ад м и н истратор покидает ваш у орга н и заци ю , нет н е ­
обходимости отслежи вать в с е хосты , на которых у этого пол ьзователя могл и б ы т ь пра­
ва sudo . Когда необход и м ы и з м е н е н ия , вы просто и зм е няете главн ы й файл sudoers
и расс ылаете е го заново.
Естествен н ы м следстви е м этого подхода я вляется то , что разре ш е н ия sudo м о гут
б ыть луч ш е выраже н ы в тер м инах учетных зап и с е й пол ьзовател е й , а не гру п п U N IX.
Н а п р и м е р , зап и с ь
% wh e e l
ALL = A L L
7Тради ц ион н ы й п е р с онаж в о п и сан и я х к р и п то гр аф и ч е с к их п рото к олов . - Прим еч . ред.
Глава 3. Управление доступом и привилегии суперпользователя
115
и меет некоторую и нтуитивную привлекательность, но она отменяет перечисление при­
вилегированных пользователей на каждой локальной машине. Вы не можете взглянуть
на эту строку и определить, к кому она относится, не подходя к рассматриваемой маши­
не. П оскольку идея состоит в том , чтобы сохран ить всю соответствующую информацию
в одном м есте, лучше избегать такого типа группировки при совместном испол ьзовани и
файла sudoers в сети. Конечно, есл и членство в ваше й группе тесн о координируется
по всей организации , группы можно использовать без проблем.
Распределение файла sudoer s лучше всего достигается с помощью более ш ирокой
систе м ы управл е н ия конфигурацией , как описано в главе 2 3 . Одна ко есл и вы еще не
достигл и такого уровня, вы можете легко разослать его самостоятельно. Однако будьте
осторожны : установка поддельного файла sudoer s
это быстр ы й путь к катастрофе .
Это также удобн ы й файл для испол ьзования в системе монитори н га целостности фай­
лов; см. раздел 2 8 . 8 .
В случае отсутствия систе м ы управления конфигурацией лучше всего испол ьзовать
сценарий извлечения информации, которы й заканчивается планировщиком cron на каж­
дом хосте. Используйте команду s cp для копирования текущего файла sudoer s из из­
вестного центрального репозитория , а затем проверьте его с помощью команды vi sudo
-с -f n e ws udo ers перед установкой, чтобы убедиться , что формат является приемле­
мым для локальной программы sudo. Команда scp проверяет ключ хоста удаленного сер­
вера, гарантируя, что файл sudoers поступает с вашего хоста, а не с поддельного сервера.
При совместном использован ии файла sudoers спецификация и м е н и хоста может
б ыть н е много сложной. По умолчанию програм ма s udo испол ьзует вывод команды
hos tname в качестве текста, который нужно сравнить. В зависи мости от согла ш е н и й ,
используемых в вашей организации, это имя может включать или не включать часть до­
мена ( например , a n c h o r или a n c ho r . c s . c o l o r a d o . e d u ) . В л юбом случае имена хо­
стов, указанные в файле sudoer s , должны совпадать с именам и , которые возвращают
все хосты . (Вы можете включить опцию fqdn в файле sudoers , чтобы попытаться пре­
образовать локальные имена хостов в их полные формы . )
Совпадение и м е н хостов сложнее проверяется в облаке , где имена экземпляров часто
по умолчанию имеют ал горитмически сгенерированные шаблон ы . Программа sudo по­
н и м ает простые с и м волы шаблонов соответствия (подстановки) в именах хостов, по­
этому рассмотрите возможность испол ьзования схе м ы и м енован и я , которая включает
в себя некоторые указания на классификацию безопас ности каждого хоста с точки зре­
н ия программы sudo .
Кроме того, можно использовать виртуальные сетевые фун кции облачного провай­
дера для разделе н и я хостов по J Р-адресу, а затем сопоставлять I Р-адреса в место и м е н
хостов из файла sudoers.
-
Откл ючение учетной з а писи roo t
Есл и ваша организация стандартизирует испол ьзование прогр аммы sudo , вы вряд
ли будете использовать реальные пароли root. Большая часть вашей админ истративной
команды н икогда н е будет иметь возможности испол ьзовать их.
Этот факт ставит вопрос о том , н ужен ли пароль root вообще. Если вы решите , что
не нуже н , вы можете полностью отключить вход в с истему с права м и roo t , установив
заш ифрованн ы й пароль root равны м * или другой произвольной строке фикс ирован­
ной дл и н ы . В с истеме Linux, команда pas swd - 1 блокирует учетную запись, добавляя
знак ! к зашифрованному паролю с эквивалентн ыми результатами.
Часть 1. основы администрирования
116
С и м вол ы * и ! - просто условности; н и какое п рогра м м ное обеспечение не проверя­
ет их я в н ы м образо м . И х эффе кт закл юч ается в зада н и и н е корректн ы х х е ш е й парол е й .
В результате парол ь root просто н е п роходит проверку.
Основной эффект блокировки уч етной зап ис и root закл ючается в том , что пользо­
вател ь root не может войти в систе м у, даже с консол и . Ни оди н и з п ол ьзователе й н е
м ожет усп е ш н о запустить программу s u , потому что дпя этого также требуется проверка
пароля root. Однако учетная зап и с ь roo t п родолжает существовать, и все програ м м ­
ное обеспече н и е , которое обыч но вы полняется с правами root, продолжает это делать.
В частности , п рогра м м а sudo работает как об ычно.
Основное пре и м ущество откл юч е н ия учетной зап и с и root закл юч ается в том , что
вам н е нужно зап ис ы вать парол ь root и уп равл ять и м . Вы также устраняете возмож­
н ость взлома п ароля roo t, но это более п р иятн ы й п обоч н ы й эффект, ч е м убедительная
п р и ч и н а для перехода без парол я . Редко испол ьзуе м ые парол и уже и м е ют н и зк и й риск
ком прометаци и .
Особе н н о полезно и меть реал ь н ы й п арол ь root на физических ком п ьютерах ( в от­
л и ч и е от обл а ч н ы х ил и виртуал ь н ы х экзе м пляров, с м . главы 9 и 24). Есл и пробл е м ы
с оборудова н и е м и л и конфигура цией м е ш а ют процессу sudo ил и загрузке , реал ь н ы м
ком п ьютерам необходимо будет удел ить в н и м а н и е . В этих случаях удобно и м еть тради ­
цион ную учетную зап и с ь root как авари й н ы й резерв.
Система Ubuntu поставляется с откл ючен ной учетной записью root, и вес ь
адм и н истративн ы й доступ осуществляется через програ м му sudo ил и ее эк­
в и валент с графическим пол ьзовател ьск и м интерфейсо м . Есл и хотите , мо­
жете установить парол ь root н а Ubuntu , а затем разблокировать учетную за­
пись с помощью команды sudo pa sswd -u root.
Системн ые учетные зап иси , отличн ые от root
П ол ьзовател ь root об ычно я вляется еди нстве н н ы м , кто имеет особы й статус с точ ­
ки зре н ия ядра, но в бол ь ш инстве с истем существуют и другие псевдопол ьзователи . В ы
можете иде нтифицировать эти фиктивные учетн ые зап и с и по и х иде нтифи каторам U I D,
которые обычно не пре вышают 1 00. Ч аще всего идентификаторы U I D менее 1 0 относят­
ся к с исте м н ы м учетн ы м зап ися м , а U I D от 1 0 до 1 00 - к псевдопол ьзователя м , связан­
ным с определ е н н ы м и ком поне нтам и програ м м ного обеспечен ия.
Обычно п р и н ято зам е нять звездоч кой заш ифрова н н ое пол е пароля этих с п е ц и ал ь ­
н ы х пользователе й в файле shadow ил и ma s ter . pas swd, чтобы п од и х учетн ы м и за­
п и ся м и н ел ьзя было войти в систе м у. В качестве и х систе м н ы х оболоче к дол ж н ы быть
установл е н ы програ м м ы /Ьin/false или /Ьin/nologin, чтобы защ итить от удал е н н ы х
поп ыток входа в с и стему, которые испол ьзуют ал ьтернати в ы парол е й , такие к а к файл ы
ключей S S H .
Как и в случае с учетн ы м и зап ися м и пол ьзовател е й , в бол ьш и нстве с истем определя­
ются м н ожество связа н н ы х с с истемой груп п , которые и м е ют оди наково н изкие иде н ­
тифи каторы G I D.
W Дополнительную и нформаци ю о файлах shadow и шa s te r pa s swd см. в разделе 8 . 3 .
.
Файлам и процесса м , я вляющимся частью операцио н ной систе м ы , которые не долж­
ны принадпежать к категори и roo t, иногда в качестве владельце в назначаются пользова­
тел и Ьin ил и daemon. Теория заключалась в том , что это соглаш е н и е поможет избежать
угроз безопас ност и , связа н н ых с владением права м и root. Однако это не сл и ш ком ве­
ский аргумент, и в совре м е н н ых с истемах часто испол ьзуется тол ько учетная зап ись root.
Глава 3. Уп равление досту п ом и п ри в илегии су п ер п ользователя
117
Основное преимущество псевдоучетных записей и псевдогрупп заключается в том ,
что с их помощью можно безопаснее обеспечить доступ к определ е н н ы м группам ре­
сурсов , чем с помощью учетной записи roo t. Например , базы данн ы х часто реализуют
сложные систем ы управления доступом . С точ ки зрен ия ядра он и работают как псевдо­
пользователь, такой как mys c q , которы й владеет всеми ресурсами , с вязанн ы м и с базой
дан н ых.
Сетевая файловая с истема ( N FS) использует учетную запись n o b o d y для представ­
ления пользователе й root в других с истемах. Для удал е н н ы х суперпол ьзователей, ко ­
торые должны быть л и ш е н ы своих привилегированных полномоч и й , удал е н н ы й U I D ,
равный О, должен быть сопоставлен с чем-то другим , кроме локального U I D , равного О .
Учетная запись n o b o d y действует как общее имя для этих удал е н н ы х суперпол ьзовате ­
л е й . В систе м е N F Sv4 учетная запись n o b o d y может приме няться к удал е н н ы м поль­
зователям , которые также не соответствуют действительной локальной учетной записи.
Ш Дополнительную информацию об учетной записи n o b o d y с м . в разделе 2 1 .2.
П ос кольку учетная зап ись n o b o d y должна представлять обоб щ е н ного и относ и ­
тельно бесправного пол ьзовател я , о н а не должна владеть файла м и . Есл и учетн ая за­
пись nobody владеет файла м и , значит, удал е н н ы е суперпол ьзователи могут их контро­
л ировать.
3 .3 . РАСШИРЕНИЯ СТАНДАРТНОЙ МОДЕЛИ КОНТРОЛЯ ДОСТУПА
В предыдущих разделах описаны основные концепции традиционной модели управ­
ления доступом . Несмотря на то, что эту модель можно описать на нескольких страни ­
цах , о н а в ыдержала испытание временем , потому что проста, предсказуема и способна
обрабатывать требования средне й организации . Все варианты U N IX и Linux продолжа­
ют поддерживать эту модел ь, и она по-прежнему остается стандартной и наиболее ш и ­
роко распространенной.
В современных операционных системах эта модель включает в себя ряд важных усо­
вершенствований. Текущий статус- кво обеспечивают три уровня программного обеспе­
чения.
•
Стандартная модель, описанная в этом пункте .
•
Расширен ия , которые обобщают и точно настраивают базовую модель.
•
Расшире н ия ядра, которые реал изуют альтернативные подходы.
Эти категории я вл я ются н е архитектур н ы м и слоя м и , а с корее историческими арте­
фактами. Ранн ие производные с исте м ы U N IX использовали стандартную модель, но ее
недостатки был и ш ироко признаны даже тогда. Со временем сообщество начало разра­
батывать обходные пути для решения нескол ьких более насущных проблем. В интересах
поддержания совместимости и поощрен ия широкого распространения изменения обыч­
но были структурированы как усовершенствования традиционной с исте м ы . Некоторые
из этих настроек ( например, РАМ ) теперь считаются стандартами U N IX.
За последнее десятилетие в области модуляризации систем контроля доступа были
достигнуты большие успехи. Эта эвол юция позволяет еще более радикально изм е н ить
контроль доступа. Мы рассмотрим некоторые из наиболее распространенных подклю­
чаемых параметров для Linux и Free B S D , начиная с раздела 3 .4.
Часть 1 . Основы администрирования
118
Пока мы расс мотр и м не которые из более п розаических расш ире н и й , которые связа­
н ы с бол ь ш и нством систе м . Во- первых, м ы расс мотр и м пробл е м ы , которые п ытаются
ре ш ить эти рас ш и р е н и я .
Недостатки стандартной модел и
Несмотря на свою эле гантность, стандартная модель имеет не которые очевидные н е ­
достатки.
•
Нач н е м с того, что учетная зап ись root представл яет собой поте н ц иал ьно еди н ­
стве нную точ ку отказа. Если о н а будет с ко м прометирована, целостность все й с и ­
сте м ы будет н арушена, и , по существу, н е т огра н и ч е н и й на ущерб , который может
нанести злоумышле н н и к .
•
Еди н стве н н ы й способ разделить при вилегии учетной записи r o o t - п исать про­
гра м м ы с флагом s e t u i d . К сожал е н и ю , как показывает постоян н ы й поток об­
новл е н и й програм м но го обес печ е н и я , связа н н ы х с безопасн остью , написать без­
опасное п рогра м м н ое обеспече н и е сложно. Л юбая программа, испол ьзующая флаг
s e t u i d , я вляется потен циал ьной целью.
•
Стандартная модел ь мало что может сказать о безопасности в сети . Н ет ком п ью ­
тера, к которому н е п р ивилегирован н ы й пользователь и м ел бы физическ и й доступ
и которому м ожно было бы доверять, чтобы точно п редставлять владел ьцев запу­
с кае м ы х п роцессов. Кто скажет, что кто-то н е п ереформатировал диск и н е уста­
новил свою собстве н н ую операционную систе му с идентификатором U I D по с во­
ему выбору?
•
В стандартной м одел и определ е н и е гру п п ы я вл я ется п р и вилегирова н н о й опера­
цие й . Например, ун и версальн ы й пол ьзовател ь не может выразить намере н и е , что
тол ько пол ьзователи alice и ЬоЬ должны и меть доступ к определ е н ному файлу.
•
П ос кол ьку м ногие п равила управл е н и я доступом встро е н ы в код отдел ь н ы х ко­
манд и демонов (классически й пример - програ м м а pas swd) , н е возможно пере­
о пределить поведе н и е систе м ы без измен е н ия исходного кода и переко м п ил яц и и .
В реал ьном м и ре это непракти ч н о и провоцирует ошибки.
•
Стандартная модел ь также практически н е поддерживает аудит ил и веде н и е жур­
н ал а . В ы можете в идеть, к как и м группам U N IX п р ин адл ежит пол ьзователь, но
не можете определ ить, что такое членство в груп пах позволяет п ол ьзовател ю де ­
лать. Кроме того, нет реал ьного способа отслеживать испол ьзование повы ш е н н ых
привилегий или посмотреть, какие операции о н и выпол н ил и .
РАМ : п одключ аемые модул и аутентиф и ка ци и
Уч етн ы е зап ис и п ол ьзователе й трад и ц и о н н о защи ще н ы парол я м и , хра н я щ и м ися
(в заш ифрова н н о м виде) в файлах /etc/ shadow ил и /etc/master . pas swd ил и в экви­
вале нтной сетевой базе дан н ых.
М но г и м п р о гра м м а м м ожет потребоваться проверка учетн ы х з а п и се й , вкл ючая
login, sudo , su и л юбую програ м м у, которая требует регистраци и на рабоче й станц и и
с графическим пол ьзовательск и м и нтерфейсом .
m Дополнительную информацию о файлах shadow и 111a s ter . passwd см. в разделе 8 . 3 .
Э т и п рограм м ы де йствител ьно н е дол ж н ы и м еть жестко запрогра м м и р о ва н н ы х
ожидан и й о том , как должн ы ш ифроваться и п рове ряться парол и . В идеале о н и даже
Глава 3. Управление досту п ом и п ривилегии су п ер п ользователя
119
не должн ы предполагать, что парол и вообще испол ьзуются. Что делать, если в ы хотите
испол ьзовать биометрическую идентификацию, систем у иде нтифи каци и сети или ка­
кую-л ибо двухфакторную аутентификацию? На помощь приходят подкл ючаемые моду­
ли аутентификации РАМ !
РАМ ( PluggaЬle Autentication Modules) - это оболочка для разл и ч н ы х библ иотек ау­
тентиф и кац и и , реал изующих разные методы. Систе м н ые адм и н истраторы определя ­
ют методы аутентификаци и , которые они хотят ис пользовать в системе, а также соот­
ветствующие конте ксты для каждого из них. Програ м м ы , требующие аутентиф и кации
пол ьзователя , просто вызывают с истему РАМ , а не реализуют собстве н н ые методы ау­
те нтификации .
В с вою очередь РАМ вызывает библ иотеку аутентифи каци и , указанную с исте м н ы м
адм и н истратором . Строго говоря , РАМ
это технология аутентификации , а не техно­
логия контроля доступа. Следовательно, вместо ответа на вопрос " И м еет л и пол ьзова­
тел ь Х разрешение н а выполнение операции У? " , она помогает ответить на вопрос " Как
узнать, что это действител ьно пользователь Х?"
РАМ я вляется важным ком понентом цепочки контроля доступа в большинстве с и ­
сте м , а конфигурация РАМ я вляется общей адм и н истративной задаче й . Более подроб­
ную информацию о РАМ вы можете найти в разделе 1 7. 3 .
-
Kerberos: сетева я крипто г рафическа я а утентифик а ци я
Как и РАМ , протокол Kerberos занимается аутентификацие й , а не контролем досту­
па как таковым. Однако, есл и РАМ я вляется основой проверки подлин ности , Ke rbe ros
я вляется специфическим методом аутентификаци и . В организациях, которые исполь­
зуют Ke rberos , РАМ и Kerbe ros, как п равило, работают в месте , РАМ - это оболоч ка,
а Kerberos - фактическая реал изация.
Протокол KerЬeros использует доверенную стороннюю организацию (сервер) для ау­
тентификации всей сети. Вы не аутентифицируете себя на маш и н е , которую испол ь­
зуете , а предоставляете с вои учетн ые дан н ы е службе Kerberos. Зате м Ke rberos в ыдает
криптографические дан ные, которые вы можете представить другим службам в качестве
доказательства вашей подлин ности.
Kerberos - это зрелая технология , которая широко используется десятилетиям и . Это
стандартная система ауте нтификаци и , используемая системой Windows, которая я вля­
ется частью системы Active Directory Microsoft . Больше о технологии Kerberos нап исано
в разделе 1 7 . 3 .
Сп иски уп ра вления доступом к файловой системе
Поскольку управление доступом к файловой системе крайн е важно для систем U N IX
и Linux, это одна из главных целей их разработки. Наиболее распространенн ы м допол ­
нением была поддержка списков управле ния доступом (access control lists - ACL) , обоб­
щение традиционной модел и прав пользователь/груп па/друтое, которая позволяет уста­
навл и вать разрешен ия для нескольких пользователей и групп одновреме н но.
Списки AC L я вля ются частью реал изации файловой систе м ы , поэтому они должн ы
явно поддерживаться любой файловой системой , которую в ы испол ьзуете . Тем н е менее
теперь все основные файловые систем ы U N IX и Linux в той или иной форме поддержи ­
вают АС L.
Поддержка AC L обычно осуществляется в одной из двух форм : ран н и й вариант стан ­
дарта POS IX, которы й так и не дошел до формал ьного при нятия, но был широко реа-
Часть 1. Основы администрирования
1 20
лизован в любом случае , и система, стандартизован ная N FSv4, которая адаптирует AC L
M icrosoft Wi ndows. Оба стандарта AC L описан ы более подробно в разделе 5.6.
Ш Дополн ительную и нформаци ю о б N FS см . в главе 2 1 .
Возможности Linux
С исте м ы мандатов (capabllity syste ms) делят полномочия учетной зап иси
root н а нескол ько (около 30) отдел ьных разрешени й .
Версия систе м ы мандатов в Linux основана н а черновике проекта PO S IX 1 00 3 . l e ,
который ис пол ьзуется , несмотря н а то, что о н официал ьн о н е был одобрен в качестве
стандарта. Л омимо прочего, теорети ки считают, что эта зомби-система не соответствует
академ ической кон цепции с истемы мандатов. Однако это не важно; система существует,
и Linux называет ее мандатной, поэтому м ы подч и н яемся .
Мандаты могут быть унаследова н ы от родител ьского процесса. Он и та кже могут
быть вкл юче н ы или откл юч е н ы атрибута м и , установл е н н ы м и в и с пол н яемом файл е ,
в процессе , напоминающем выпол н е н ие программы с флагом s e t u i d . Лроцессы могут
отказаться от мандатов, которые они не планируют использовать.
Традиционн ы е полномочия root это просто объединение всех мандатов, поэтому
существует довольно прямое сопоставление между традиционной моделью и мандатной.
Мандатная модел ь я вляется более детальной.
В качестве примера укажем , что мандат Linux под названием САР NET _B I N D_ SERV I CE
контролирует возможность процесса связывания с привилегированными сетевыми порта­
ми (номера которых меньше 1 024). Некоторы м демонам , которые традиционно работают
с правами root, нужен только этот конкретн ый мандат. В системе мандатов такой демон
может теоретически работать как непривилегированный пользователь и получать мандат
на возможность привязки к порту из исполняемою файла. Лока демон не проверяет явно,
что он работает от имени пользователя root, он даже не должен знать о нем.
Так л и все это в реал ьном м ире? Совсем нет. Как это обычно бывает, мандаты эво­
л юционировали и стали более мощной технологией, чем система взаимодействия с поль­
зователями . О н и ш и роко испол ьзуются системами более высокого уров н я , таким и как
AppArmor (см. раздел 3.4) и Docker (см. главу 25) , но редко используются самостоятельно.
Для адм ин истраторов полезно просмотреть тап-страницу capaЬili ties ( 7 ) , чтобы
понять, что включено в каждую из категорий мандатов.
-
_
Простр анства имен Li nux
Система Linux может распределять процессы по иерархическим разделам
(пространствам имен), из которых видна только часть системных файлов, се­
тевых портов и процессов. Ломимо прочего, эта схема действует как форма
превентивного контроля доступа. Вместо того, чтобы основывать реш е н ия
управления доступом на потенциально тонких критериях, ядро просто отри­
цает существование объектов, которые не видны изнутри данной области .
Внутри раздела применяются обычные правила контроля доступа, и в большинстве
случаев процессы , которые бъm и ограниче н ы , даже не знают об это м . Лоскол ьку огра­
н ичение я вляется н еобратим ы м , внутри раздела процессы могут выполняться с правами
root, не опасаясь, что они могут поставить под угрозу другие части с исте м ы .
Этот ум н ый трюк я вляется одни м из оснований для программной контейнеризаци и
и его наиболее известной реализации Docker. Полная система намного сложнее и вклю-
Глава 3 . Управление досту п ом и п ривилегии су пер п ользователя
1 21
чает в себя рас ш ирения, такие как доступ к файловой с истеме для копирования на за­
пись. Нам еще немного нужно сказать о контейнерах в главе 25.
В качестве форм ы контроля доступа пространство имен я вляется относительно гру­
бым подходом . Кон струкция правильно н астроенных гнезд для процессов, в которых
можно жить, также несколько сложна.
В настоящее время эта технология применяется в первую очередь к дополнительны м
службам , а не к внутренним компонентам операционной системы.
3 .4. С ОВРЕМЕННЫЙ КОНТРОЛЬ ДОСТУ П А
Уч иты вая ш и рокий диапазон выч исл ительных сред и с м е шан н ы й ус пех усилий
по продвижен и ю стандартной модели , разработчики ядра н еохотно выступ ал и в каче­
стве посредников в более ш ироких дискуссиях по контролю доступа. В м ире Linux си­
туация активизировалась в 200 1 г. , когда Агентство национальной безопасности США
предложило и нтегрировать свою с истему Enhanced Linux ( S E Linux) в ядро в качестве
стандартного средства.
По нескольким причинам сторонники ядра сопротивлялись этому слиянию. Вместо
того чтобы испол ьзовать S E Linux или другую альтернативную систему, они разработали
и нтерфейс уровня ядра API Linux Security Modules, позволяющий системам управления
доступом и нтегрироваться в качестве загружаемых модулей ядра.
Систе м ы н а основе LSM н е действуют, если пользователи не загрузили и не вклю­
чили их. Этот факт с нижает барьеры для включен ия в стандартное ядро, и система
Linux теперь поставляется с SELinux и четырьмя другим и системами (AppAnnor, Smack,
ТОМ ОУО и Yama) , готовыми к работе.
Разработки на стороне BSD примерно совпадают с разработкам и Linux, в основном
благодаря работе Роберта Уотсона ( Robert Watson) н ад TrustedBSD. Этот код был вклю­
чен в с истему FreeB S D , начиная с верси и 5. Он также предоставляет технологию песоч­
н и ц ы приложений, используемую в системах MacOS и IOS от Apple.
Если одновременно задействованы несколько модулей управления доступом , для их
разрешения должна быть утверждена отдельная операция. К сожалению, с истема LSM
требует я вн ого сотрудни чества между а ктивными модул я м и , и ни оди н из существую­
щих модулей не включает эту функцию. На данн ы й момент систе м ы Linux фактически
ограничены выбором одного дополн ительного модуля LSM.
Отдел ьные экосистемы
Контроль доступа по своей сути относится к уровню ядра. За исключением списков
управления доступом к файловой системе (см . раздел 5 . 6 ) , по существу, среди систем
в отношении ал ьтернативных механизмов контроля доступа нет стандартизации . В ре­
зультате каждое ядро имеет свой собствен н ы й набор доступн ых реал изаций, и ни одна
из них н е я вляется кросс-платформенной.
Поскольку дистрибутивы Linux имеют общую линию ядра, все они теорети­
чески совместим ы со всем и раз.личными предложе н и я м и обеспечения без­
опасности Linux. Одн ако на практике это не так: эти систе м ы нуждаются
в поддержке на уровн е пользователя в виде допол н ительных команд , моди­
фикаций компонентов уровня пользователя и профиле й защиты для демо­
нов и служб. Следовательно, у каждого дистрибутива есть только один или
два механизма контроля доступа, которые он активно поддерживает.
Часть 1. Основы администрирования
1 22
О бя з ател ь н ы й ко нтр ол ь доступ а
Стандартн ая м одел ь U N I X расс матри вается как форм а " и збирательного контрол я
доступа" , пос кольку позвол я ет вл адельцам контрол и руем ы х доступом объектов устанав­
л и вать права на н их. Н а п р и м е р , вы можете разреш ить други м пол ьзовател я м просматр и ­
вать содержимое ваш е го домашнего каталога ил и нап исать программу с флагом s e t u i d ,
которая позволяет други м л юдя м отправлять с и гнал ы ваш и м процессам .
Избирател ьное упра вл е н и е доступом не обеспечивает особой гарантии безопас ности
дан н ых на пол ьзовател ьс ком уров н е . Поскольку пол ьзовател и имеют возможность уста­
н а вл и вать разреш е н и я сам остоятел ьн о ; н и кто не знает, что о н и могут делать со с во и м и
собстве н н ы м и файла м и . Даже сам ы е благонамере н н ые и обуч е н н ы е пол ьзовател и могут
ошибатьс я .
С исте м ы мандатн о го у п ра вл е н и я доступом (mandatory access control
-
МАС ) по­
зволяют адм и н истратора м п и сать пол итики контроля доступа, которые переопредел я­
ют ил и допол н я ют изби ратель н ы е разре ш е н и я тради ц и о н н о й модел и . Н а п р и м е р , в ы
можете установить правило, что домаш н и е каталоrи пользовател е й досту п н ы только и х
владельцам . Тогда не важ но, что п ол ьзователь делает при ватную коп и ю конфиде н циал ь­
ного документа и небрежно относится к разреш е н ия м документа ; в л юбом случае н и кто
н и ч е го не может увидеть в домашн е м каталоге этого пользовател я .
М андаты МАС
-
это эффективная технология для реализации моделе й безопасно­
сти , таких как с исте ма м ногоуров н е во й безопас н ости М и н истерства оборо н ы . В этой
модели пол ит и ки безопас ности контрол ируют доступ в соответствии с вос п р и н и маемой
се кретностью контрол ируе м ы х ресурсов. П ол ьзователя м назначается урове н ь безопас­
ности из структурированной иерархии. Они могут ч итать и писать документы н а том же
уровне се кретности ил и н и же , но не могут получ ить доступ к доку м е н там с более высо­
к и м уровнем секретност и . Н а п р и м е р , пол ьзовател ь с уровнем " се кретно " может ч итать
и п и сать секретные документы , но не м ожет ч итать докуме нты , которые классифициру­
ются как совер ш е н н о секретн ы е .
Есл и вы н е обрабаты ваете с е крет н ы е дан н ы е для государствен н о го органа, малове­
роятно , что в ы когда- н ибудь столкнетес ь или захотите развернуть такие всеобъемлющие
м одел и безопасност и . Ч а ще всего с исте м а МАС ис пол ьзуется дл я защиты отдел ь н ых
служб , в п роти вном случае они остаются вне доступа пол ьзовател е й .
Хорошо реализова н н ая пол ити ка МАС основывается на п р и н ц и п е наи м е н ьш их при­
вилегий ( разре шая доступ тол ько тогда , когда это н еобходимо) , поскол ьку правильно
с проектирова н н ы й бра ндмауэр позволяет проходить тол ько определ е н н ы м признан н ы м
службам и кл и е нтам . С исте ма МАС может поме шать компрометаци и с исте м ы с уязви­
мым программ н ы м обес пече н и е м (например, н а ос нове перепол н е н ия буфера) , огра н и ­
ч и в объе м наруше н и я д о нескол ьких кон кретн ых ресурсов , требуе м ых этому програ м м ­
н о м у обеспече н и ю .
К сожале н и ю , систе ма МАС стала ч е м -то вроде модного слова, с и н о н и мом " расш и­
ренного контрол я доступа " . Даже общ и й А Р l - и нтерфейс безопасности Free B S D назы ­
вается и нтерфе йсом МАС , н е с м отря на то , что н е которы е допол н е н и я не предл агают
н и каких реал ьных фун к ц и й МАС .
Досту п н ы е систе м ы МАС варьируются от глобал ьной зам е н ы стандартной модел и
до облегч е н н ы х рас ш ире н и й , которые предназнач е н ы для кон кретных предметных об­
ластей и с ценариев и с п ол ьзован и я . Общим для реал изаци й МАС я вл яется то , что о н и
обыч но доба вл я ют в с исте му контроля доступа централ и зован н ы е , нап исан н ы е адм и­
н истратором ( ил и поста вл я е м ы е поставщиком ) пол ити к и , а также обыч ное сочетание
разре ш е н и й файлов, с п и с ков управл е н ия доступом и атрибутов п роцесса.
Глава 3. Уп равление досту п ом и п ривилегии су п ер пользователя
1 23
Н езавис имо от области действия , системы МАС представляют собой потенциально
знач ительное отклонение от стандартных с исте м , которое может оказаться неожидан ­
н ы м для проrрам м , основанных на стандартной модели безопасн ости U N IX. ПреЖде
чем перейти к пол номасштабному развертыванию МАС , убедитесь, что вы понимаете
правила ведения журнала модуля и знаете , как идентифицировать и устранять пробле­
мы, связанные с МАС.
Контрол ь доступ а на основе ролей
Еще одна фун кция, которая обычно проверяется системами контроля доступа, - это
контроль доступа на основе ролей (также известн ый как RBAC ) , теоретическая модель,
формал изованная в 1 992 r. Дэвидом Феррариоло ( David Ferraiolo) и Риком Куном ( Rick
Kuhn). Основная идея состоит в том , чтобы добавить слой косвенности в управление до­
ступом к вычислениям.
Разрешения назначаются не пользователям непосредственно, а промежуточ н ы м кон­
струкци я м , называе м ы м ролями , а рол и , в свою очередь, назначаются пользователя м .
Чтобы принять решение, связанное с управлением доступом, с истема перечисляет роли
текущеrо пользователя и проверяет, имеют ли какие-л ибо из этих ролей соответствую­
щие разрешения.
Роли похожи на разные rруппы U N IX, но они носят более общий характер, посколь­
ку моrут испол ьзоваться вне контекста файловой с исте м ы . Роли также моrут образовы­
вать иерархии, что значительно упрощает адм инистрирование. Например, вы можете
определ ить рол ь "старшеrо адм инистратора " , которая и меет все разреш е н ия "адми н и ­
стратора" плюс допол нительн ые разрешения Х, У и Z.
М ноrие верси и U N IX, вкл ючая Solaris, H P- UX и AIX, вкл ючают в себя н екоторую
форму встроен ной систем ы R BAC. Систем ы Linux и Free B S D не и м е ют четкоrо, соб­
стве н ноrо средства RBAC . Однако она встроена в нескол ько более полных вариантов
системы МАС.
SELinux: улуч шенн ая безопасность Li n ux
S E Linux является одной из старей ш их реализаций систе м ы Linux М АС и я вляется
продуктом Аrентства национал ьной безопасности С ША. В зависимости от точ ки зре ­
н ия , этот факт может быть источ н и ком уверенности или подозрительности .8
Система S E Liпux использует максимал истский подход и реал изует почти все возмож­
ности МАС и R BAC, которые можно себе представить. Н есмотря на то что она внедрена
в нескольких дистрибутивах, ею, как правило, сложно упраалять и устранять неполадки.
Приведем аноним ную цитату из старой версии страницы S E Linux в системе Wikipedia, ко­
торая передает разочарование, испытываемое мноrими системными адми н истраторами.
Как ни странно, хотя заявленное предназначение SELiпиx заключается в том, чтобы
облегчить создание индивидуализированных политик управления доступом, специаль­
но предназначенных для практики и правил хранения данных в организациях, ее про­
грамм11ые инструменты настолько скудны и неудобны, что поставщики выживают
главным образом благодаря консалтингу, который обычно принимает форму дополни­
тельных изменений в политике безопасности шаблонов.
8 Есл и вы склонны к подозрен и я м , то стоит отметить. что в качестве части дистриб уr и ва ядра Linux
кодовая база S E Linux открьrrа для проверки.
Часть 1. Основы администрирования
1 24
Нес мотря на сложность управл е н и я , внедре н и е систе м ы S E Linux медлен но рас ш и ­
раяетс я , особенно в таких средах, как п равител ьстве н н ы е орга н ы , финансы и здравоох­
ран е н и е , которые и м е ют высокие и кон кретн ые требования к безопас ности. Она также
я вл яется стандартной частью платфор м ы Android.
Наше общее м не н и е относительно систе м ы S E Linux закл ючается в том , что она спо­
собна при нести бол ьш е вреда, чем пол ьз ы . К сожал е н и ю , этот вред м ожет п роя вляться
не тол ько как потеря н ное вре мя и испорче н н ое настрое н ие с исте м н ы х адм и н истрато­
ров, но и , как это ни парадоксал ь н о , в качестве недостатков в области безопас ност и .
Сложные модели трудно обсуждать , а S E Linux - это не ровное и гровое пол е ; хакеры ,
которые с п е ц иализируются на этой систе м е , пони мают ее гораздо л уч ш е , ч е м средн и й
с исте м н ы й адми н истратор .
В частности , разработка пол итики S E Linux я вля ется сложной задаче й . Н а п р и м е р ,
дл я защиты нового демона политика должна тщател ьно перечислить в с е файлы , каталоги
и другие объекты , к которы м процесс должен получ ить доступ. Для сложного про грамм ­
ного обеспечени я , такого как sendmail ил и httpd, эта задача может быть довольно слож­
ной. Например, одна компания предлагает треХдневный курс по разработке политики.
К счастью, м ногие общие политики доступн ы в режиме онлайн , и бол ь ш и н ство дис­
трибуrивов S E Linux и м е ют разу м н ы е знач е н и я по умолча н и ю . Их можно л е гко устано­
вить и настроить для кон кретной среды. Пол номасштаб н ы й редактор пол итики , цел ью
которого я вл я ется обл е гч е н и е п р и м е н е н ия п ол итики , можно н айти на сайте s e e d i t .
sourceforge . net.
С исте ма S E Linux хорошо поддержи вается систе мам и Red Hat ( и , следова-
RHEL
тельно, CentOS) и Fedora. Систем а Red Hat устанавливает ее по умолчан и ю .
� Систе м ы Deblan и S U S E Linux также и м е ют не которую доступ н ую поддержку S E Linux, но вы должны установить допол н ител ьные пакеты , а конфигу­
рация по умолчан и ю я вля ется более слабо й .
Систе м а Ubuntu н асл едует н е которую поддержку S E Linux от Deblan, н о
в посл ед н и х верс и я х Ubuntu и с п ол ьзуется систе м а AppArmor ( с м . дал ее ) .
Н е которые руди м е нтарн ы е пакеты , относящиеся к S E Linux, по-прежн е м у
досту п н ы , но о н и , как правило, н е обновл яются .
Файл /etc / sel inux/ config - это элемент управления верхнего уровня для систем
SELinux. В нем есть и нтересн ы е строк и :
S E L I NUX= e n f o r c i n g
S E L I NUXT Y P E= t a r g e t e d
П е р вая строка и м е е т т р и возможн ы х з н ач е н и я : e n f o r c i n g , p e r m i s s i v e ил и
d i s a Ы e d . П арам етр e n f o r c i n g гарантирует, что загруже н ная пол ити ка п р и м е н я ется
и запре щает наруш е н ия . Параметр ре rmi s s i ve допус кает н аруш е н и я , но регистр и ­
рует их в журнале s ys l o g , что полезно дл я отладки и разработки п ол ити к и . П араметр
d i s aЫ e d пол н остью отключает систему S E Linux.
Имя S E L I NUXTYPE представляет собой имя испол ьзуемой базы дан н ых пол итик. Это,
по суr и , и м я подкаталог11 внуrри каталога /etc/ selinux. В оди н и тот же момент вре­
м е н и п р и м е н яться м ожет тол ько одн а пол итика, а досту п н ы е н аборы пол итик зависят
от с исте м ы .
RHEL
П о умолчан и ю стратегия систе м ы Red Hat задается параметром t a r g e t e d
и напраалена на обеспечение дополн ительной безопасности нескольких демонов, которые она явно защищает, предоставляя остальную часть систе м ы самой
Глава 3. Управление доступом и привилегии суперпользователя
1 25
себе. Ран ьше существовала отдельная политика, называемая s t r i c t , которая
применяла стратегию МАС ко всей системе, но эта политика была объединена
с политикой t a rgeted. Чтобы получить полную систему МАС, удалите модули
unc on f i nedus и unco n f i nedu s e r с помощью команды semodule -d .
Систе м а Red H at также определяет пол итику ml s , которая реали зует м ногоуровне­
вую зашиту Do D . Она устанавл ивается отдельно с помощью команды yum i n s t a l l
sel inux -po l i cy-ml s .
Есл и в ы заинтересован ы в разработке собственных пол итик S E Linux, обратите в н и ­
м а н и е н а утилиту audi t2 allow. Она создает определения пол итики из журналов нару­
ш е н и й . Идея заключается в том , чтобы разреш ить защиту подсистем ы , регистрируя , но
н е запрещая ее наруш е н и я . Затем можно подключить подсистему и создать политику,
которая , по существу, позволяет этой подсистеме все. К сожалению, трудно гарантиро­
вать полное покрытие всех путей кода с помощью такого подхода, поэтому автоматиче­
ски созданные профил и вряд л и будут идеальн ыми.
AppArmor
С истем а AppArmor я вл яется продуктом комп а ни и Canonical , Ltd . , в ы ­
п ус кающей дистрибутив Ubuntu. Она поддерживается систем а ми Deblan
и Ubuntu, н о также б ыла при нята в качестве стандарта дистрибутивами
S US E . Систе м ы U buntu и S U S E позволяют устанавливать ее по умолчанию,
хотя н абор защищенных служб не я вляется обш и рн ы м .
Система AppArmor реализует стратегию МАС и предназначен а в качестве дополне­
ния к традицион ной системе управления доступом U N IX. Н есмотря на то что возмож­
на л юбая конфи гураци я , AppArmor не предназначена для с исте м ы , ориентированной
на пользователя . Ее основная цель - обеспечение безопасности , т.е. ограничение ущер­
ба, которы й могут нанести отдельные програ м м ы , если они будут скомпрометированы
или запущены .
Защище н н ые програм м ы по- прежнему подвергаются все м огран ичен и я м , нал ага­
е м ы м стандартной моделью, но, кроме того, ядро фильтрует их действия через назна­
ч е н н ы й и специфи ч н ы й для приложен ия профиль AppArmor. По умолчани ю с истема
AppArmor отклоняет все запросы, поэтому профиль должен явно указывать все , что раз­
решено для процесса.
Про гра м м ы без проф ил е й , таких как пользовательские оболоч ки, не и м е ют особых
ограничений и работают так, как если бы с истема AppArmor не была установлена.
Эта роль обеспечения безопасности службы , по сути, я вляется той же конфигураци­
ей, которая реализован а системой S ELinux в целевой среде Red Hat. Тем не менее си­
стема AppArmor разработан а специально для обеспечения безопасности, поэтому она
скрывает н е которые из самых загадочных н юансов SELinux.
П рофили AppArmor хранятся в файле / etc/ apparmo r . d , и относительно понят­
ны даже без подробного знания систе м ы . Например, вот профиль для демона cup s ­
browsed, входящего в с истему печати в операционной системе Ubuntu:
# i n c l ude < t u n aЫ e s / g l ob a l >
/ u s r / s b i n / cup s -b r ow s e d (
# i n c l ude < ab s t ra c t i on s / b a s e >
# i nc lude < ab s t r a c t i o n s / n ame s e rv i c e >
Часть 1. Основы администрирования
1 26
# in c l ude < a b s t ra c t i on s / c up s - c l i e n t >
# i n c l ude < a b s t r a c t i on s /dbu s >
# i n c l ude < a b s t r a c t i on s / p l l - ki t >
/ e t c / cup s / cup s - b rows e d . c on f r ,
/ e t c / cup s / l p o p t i o n s r ,
/ { va r / , } run / c u p s / c e r t s / * r ,
/ va r / ca c h e / c up s / * r w ,
/ tmp / * * r w ,
# S i t e - s p e c i f i c addi t i o n s and ove r ri de s . S e e l o c a l / README .
# i nc lude < l oc a l / u s r . s b i n . c up s -b r o w s e d >
Бол ьшая часть этого кода я вляется модул ь н ы м ш аблоном . Н а n р и м е р , этот де ­
мон должен в ыпол нять поиск и м е н хосто в, поэтому nрофил ь и н терnол и рует nуть
aьstractions /nameservi ce и предостамяет доступ к библ иотекам разрешений име н ,
файлам /etc/ns swi tch . conf и /etc/ho s ts , сетевым портам , испол ьзуемым протоко­
лом L DAP и т.д.
И нформация профилирования, специфичная для этого демона, состоит (в дан ном
случ ае ) из с писка файлов, к которы м может обращаться демон , а также разреш е н и й
для каждого файла. С интаксис сопостамения шаблонов немного отличается: символ ы
* * могут соответствовать н ескол ьким компонентам пути , а { va r / , 1 соответствует стро­
ке va r / в соответствующем месте пути.
Даже этот простой профиль устроен довольно сложно. Есл и рас крыть все и нструк­
ции i include , то профиль имеет длину около 750 строк. (А ведь мы выбрали этот nри­
мер ради его краткости . Увы ! )
С истема AppArmoг ссылается на файл ы и програм м ы no и м е н и пут и , ч т о дела­
ет профили удобоч итаем ы м и и независ и м ы м и от какой-л ибо кон кретной реализации
файловой с исте м ы . Однако этот подход ямяется компром исс н ы м . Например, с истема
AppArmor не распознает жесткие ссылки, указывающие на оди н и тот же объект.
3.5. Л ИТЕРАТУРА
•
F ERRAJOLo, Dлvю F. , D . R1cнлRD Ku н N , д N D Rлмлswлмv CндNDRAMOULI . Role-Based
Access Control (2nd Edition) . Вoston, МА: Artech House, 2007.
•
HлrNEs, RrcнлRD. The SELinux Notebook (4th Edition). 20 1 4. Сбор н и к информации,
относящейся к системе S E Linux, наиболее близкий к официал ьной документаци и.
Доступен для загрузки на сайте f r e e compu t e rboo ks . с от.
•
VERM E U L E N , SvEN . SELinux Cookbook. Birmingham, U K: Packt PuЬlishing, 20 1 4. Кн и га,
содержащая сам ые разнообразные советы по работе с систе мой S E Linux. В ней
описаны модели обеспечения безопасности как служб, так и пол ьзователей.
Глава
4
Упра вление процессами
Процесс представляет собой выполняемую проrрамму. Это абстракция, с помощью ко­
торой можно управлять памятью, временем работы процессора и ресурсами ввода-вывода.
Это аксиома философии U N IX, позволяющая к а к можно больше работать в кон ­
тексте процессов, а н е ядра. С исте м н ы е и пол ьзовател ьс к и е п роцессы соответствуют
одни м и тем же правилам , поэтому вы можете испол ьзоват ь один набор инструментов
для управления и м и .
4. 1 . КОМПОНЕНТЫ ПРОЦЕССА
П роцесс состоит из адресного пространства и н аб ор а структур да н н ы х внутри ядра.
Адресное пространство представляет собой н абор стр а н и ц памяти , которые ядро выде­
л ило для использования процессу. 1 Эти стран ицы содержат код и библиотеки, которые
в ы полн я ются процессом , пере менн ые процесса, ero стеки и различ ную допол н итель­
ную информацию, необходимую ядру во время выполнения. В иртуальное адресное про­
странство процесса вьщеляется в физической памяти случайным образом и отслежива­
ется табл и цами страниц ядра.
В структурах данных ядра хран ится всевозможная и нформация о каждом пр о ц е с се .
К н аиболее важ н ы м относятся следующие сведения:
•
табли ца распределения памяти, выделен ной процессу;
•
текущее состоян ие процесса ( неактиве н , пр и ос тан овл е н вы п ол няется и т. п . ) ;
•
приоритет процесса;
,
1 Стран и цы - это базовы е бло ки памяти , раз м ер которы х состамяет от 1 до 8 Кбайт.
Часть 1. Основы администрирования
1 28
•
и н формация о ресурсах, ис пользуемых процессом ( централ ь н ы й процессор , память и т.д. ) ;
•
информация о файлах и сетевых портах, открытых процессом ;
•
маска с и гн алов (запись о том , какие сигнал ы блокируются);
•
имя владельца процесса.
Поток - это контекст выполнения процесса. Каждый процесс и меет как м и н и мум
оди н поток, но н е которые процесс ы могут и меть нескол ько потоков. Каждый поток,
де йствуя в адресном пространстве внешнего процесса, и меет свой собстве н н ы й сте к
и регистры центрального процессора
В современн ых ком пьютерн ы х с истемах испол ьзуются нескол ько центральн ых про­
цессоров и н ес колько ядер внутри каждого центрального процессора. Такие м ногопо­
точ н ые приложения , как B I N D и Apache, извле кают максимал ьную пользу и з мул ь­
тиядерн ых с истем бла годаря тому, что эти приложе н ия могут отрабаты вать нескол ько
запросов одновременно.
Многие характеристики процесса непосредстве н но вли я ют н а е го выпол н е н и е .
В частност и , имеет значе н и е , с кол ько вре м е н и выделяется е м у централ ьн ы м процес ­
соро м , к каким файлам он и меет доступ и т.д. В следующих подразделах рассмотр и м
наиболее интересные с точки зре н и я системного адм и н истратора характеристик и про­
цессов. Они поддерживаются во всех версиях систем U N 1Х и Linux.
И дентификатор п роцесса P I D
Ядро назначает каждом у процессу уни кальный идентификатор. Бол ьшинство команд
и с исте м н ых вызовов, работающих с процессами , требует указания кон кретного иден ­
тификатора, чтобы был ясен контекст операции. Идентификаторы P I D присваи ваются
по порядку по мере создания процессов.
В настоящее время с истема Linux испол ьзует кон цепцию пространства имен
процесса, которая е ще больше ограничивает способность процессов видеть
друг друга и вли ять друг на друга. Контейнерные реализации используют эту
фун кцию для разделе н и я процессов. Оди н из побоч н ых эффектов закл ю­
чается в том , что процесс может и м еть раз н ые P I D в зависимости от про­
стран ства и м е н набл юдателя . Это похоже на эйнштей новс кую относител ь­
н ость для идентификаторов процессов. Для пол уч е н и я допол н ител ьной
и нформации см. главу 25.
И дентифи катор родител ь ского п роцесса PPID
Н и в U N IX, н и в Linux нет с истем ного вызова, который б ы и ници ировал новый про­
цесс для выполнения конкретной программ ы . Для того чтобы породить новый процесс ,
существующий процесс должен клонировать сам себя. Клон может заменить выполняе­
мую программу другой.
В операции клонирова н ия исходный процесс назы вают родительским, а его клон
дочерним . П о м и м о собствен н о го иде нтификатора, кажд ы й дочер н и й процесс и м еет
атрибут P P I D ( Parent Process I D) , который совпадает с идентификатором породившего
его родительс кого процесса2•
-
2 По крайне й мере первоначально. Есл и родительский процесс п о какой -то причине завершается
ран ьше потомка, демон ini t или sytemd (процесс с номером 1 ) подставляет себя на место п редка
(подробности описан ы в разделе 4. 2).
Глава 4. Управление п роцессами
1 29
Идентификатор родительс кого процесса - весьма полезная и нформация , если при­
ходится и м еть дело с н еизвестны м (и, возможно, нестандартно ведущим себя) процес­
сом. Отслежи вание истоков процесса может облегч ить понимание его назначения и зна­
ч имости.
W Дополнительную и нформацию об идентификаторах U I D с м . в разделе 8 . 2 .
Идентификатор пол ьзователя U I D и текущий идентификатор
пол ьзователя EU I D
U I D ( Useг I D) - это идентификатор пол ьзователя , создавшего данн ы й процесс ,
точнее, копия значения U I D родительского процесса. Менять атрибуты п роцесса могут
только его создатель ( владелец) и суперпользовател ь.
m Дополнительную информацию об установке флага s e t u i d см в разделе 3 . 1 .
E U I D ( Effective User I D) - это текущи й пользовательский идентификатор процесса,
п редназначе н н ы й для того, чтобы определить, к каки м ресурсам и файлам у процесса
есть п раво доступа в дан ный моме нт. У большинства процессов значения U I D и EU I D
одинаковы . Исключение составля ют программ ы , у которых установлен бит смены иден­
тификатора пол ьзователя ( s e t u i d ) .
Зачем н ужн ы идентификаторы U I D и E U I D'? Просто чтобы разграни ч ить понятия
идентификаци и и прав доступа. К тому же програ м м ы с установлен н ы м битом s e t u i d
н е все гда выполняются с расшире н н ы м и привилегиям и . В бол ьш и нстве с истем знач е ­
н ие E U I D можно устанавл и вать, чтобы предоставлять процессу дополнительн ые полно­
моч и я , и сбрасывать, чтобы отбирать их.
В бол ь ш и н стве систем хран ится нач ал ь н ы й идентификатор, т.е . коп ия значе ния
E U I D, которое имел процесс в начальной точ ке. Если процесс не удалит сохран е н н ы й
идентификатор , его можно будет использовать в качестве реального или текущего иден­
тификатора. Благодаря этому " консервати вно" написанная программа с установленным
б итом s e t u i d может большую часть времени работать с обычными привилегия м и , пере­
ходя в режим расширенных привилегий л и ш ь в определенные моменты.
В с истеме Linux есть еще и нестандартн ый параметр FS U I D, определяющий
возможности работы с файловой системой, но вне ядра он испол ьзуется
редко и не переносится на другие с исте м ы U N IX.
Идентификатор групп ы (G I D) и текущий
идентификатор груп п ы (EG I D)
m Дополнительную информацию о группах с м . в разделе 8 . 2 .
G I D ( G roup I D) - это иде нтификатор груп п ы , к которой принадлежит владеле ц
процесса. Идентификатор EG I D связан с атрибутом G I D так же , как с атрибутом U I D,
т. е . они будут отличатьс я , если программа запус кается с установл е н н ы м битом s e t g i d .
В ядре назначение сохранен ного G I D для каждого процесса аналогично назначен и ю со­
храненного атрибута U I D.
В знач ительной сте п е н и атрибут G I D процесса я вл яется рудиментар н ы м . С точ к и
зрения определения прав доступа процесс одновременно может относиться к нескол ь­
ким группам. Список групп хран ится отдел ьно от значений G I D и EG I D. П р и анал изе
прав доступа проверяется текущи й идентификатор и допол н ител ьн ы й список групп , но
не значе н ие G I D.
1 30
Часть 1. Основы администрирования
Еди нствен ная ситуация , в которой атрибут G I D и м еет реал ьное значен ие , - созда­
ние процессом новых файлов. В зависи мости от установленных прав доступа в данной
файловой с исте ме новые файлы могут принимать атрибут G 1 D создающего их процесса.
Подробнее эти вопросы рассмотрены в разделе 5 . 5 .
Фактор уступч ивости
П риоритет процесса определяет, какую дол ю времени централ ьного процессора по­
лучает програм ма. Ядро применяет динамический ал горитм вычисления приоритетов,
уч итывающ и й , с колько вре м е н и це нтрал ьного процессора уже испол ьзовал процесс
и скол ько времен и он ожидает своей очереди. Кроме того , учитывается заданный адм и ­
н истратором так назы вае м ы й фактор уступчивости, который определяет, в какой сте­
п е н и п рограмма может "делитьс я " процессором с другим и пол ьзовател я м и . П одробнее
этот механизм рассм атри вается в разделе 4.4.
У п ра вля ющий терминал
m Дополнительную информаци ю о стандартных канал ах связи см в разделе 7 . 2 .
С большинством процессов, не я вляющихся демонам и , связан управляющий терм и ­
нал , которы й определяет базовую конфигураци ю стандартн ых каналов ввода, вывода
и ошибок. От управляющего тер м и нала зависит также распределение с и гналов в ответ
на события клавиатур ы , например нажатие клавиш < Ctrl + C > , о чем пойдет реч ь в раз­
деле 4. 2.
4.2. Жизненный цикл ПРОЦЕССА
Для создания нового процесса существующи й процесс , как правило, клонирует сам
себя с помощью с исте м ного вызова fork . 3 В результате форм ируется копия исходного
процесса, и м е ющая л и ш ь некоторые отличия. В частности , новому процессу присваи­
вается собстве н н ы й иде нтификатор P I D , и учет ресурсов ведется для него независимо
от предка.
Систе м н ы й вызов fork и меет уникальное свойство: он возвращает два разных зна­
ч е н и я . В дочернем процессе это ч исло О , а в родительском - идентификатор P I D про­
цесса- пото м ка. Поскол ьку в остал ьном процессы иде нти ч н ы , они должны проверять
результат вызова, чтобы определ ить, какую роль следует и грать в дал ьнейше м .
После завершения системного вызова fork дочерний процесс обычно запускает но­
вую программу с помощью одного из систе м н ых вызовов семейства ехес. Все вызовы
этого семейства заменяют програм му, выполняемую п роцессом, и устанавл и вают сег­
ме нты памяти в исходное состоя ние. Формы вызовов ехес различаются тол ько с посо­
бам и указания аргументов командной строки и переменных среды , передавае мых новой
программе.
При загруз ке с исте м ы ядро самостоятел ьно запус кает н е с кол ько процессов.
Наиболее важ н ы й из них - демон ini t или sys temd с номером процесса, всегда рав­
н ы м 1 . Эти процессы отвечают за выполнение сценариев запуска с исте м ы , хотя харак3 Техн и чески в с и стемах L i n u x испол ьзуется с и стем н ы й
вызов c l one , рас ши р е н ие систе м ного
в ызова fork , которое обрабатывает потоки и включает допол н ительные функци и . Систе м н ый
в ызов f o rk остается в ядре для обеспеч е н и я обратной совмести мост и , но на самом деле он
в ы полняет систем н ы й вызов clone.
Глава 4. Управление процессами
1 31
тер их действий в U N IX и Linux разл ичается. Все процессы, кроме тех, что создаются
ядро м , я вл я ются пото м ками этих п роцессов. Допол н ительная и н формация о загрузке
и демоне ini t содержится в главе 2 .
Д е м о н ini t ( или systemd) и грает и другую важную роль в управлен и и процесса­
м и . Завершающийся п роцесс вызывает фун кцию _exi t, чтобы уведомить ядро о с воей
готовности прекратить работу. В качестве параметра функции _exi t передается код за­
вершения - целое число, обозначающее причину прекращен и я процесса. По общепри­
нятому соглашению, нул ь свидетельствует об успеш ном завершении процесса.
Ядро систем ы требует, чтобы, прежде чем процесс окончательно исчезнет, его удале­
н и е было подтверждено родительским процессом с помощью с исте м ного вызова wai t.
Этот вызов возвращает код завершен и я пото м ка (или сообщает о причине е го уничто­
же н и я , если завершение не было естествен н ы м ) и в случае необходимости статистику
использования ресурсов.
Описанн ы й механизм работает нормально, если родительский процесс завершается
позже порожденных им процессов и вы пол няет с исте м н ые вызовы wai t для их унич­
тожен и я . Если же родительский процесс завершается ран ьше срока, то ядро распозна­
ет, что вызова wai t не последует, и переназначает все "осиротевшие" процессы демону
init ( ил и sys temd). Он берет их под с вой контрол ь, осуществляя дл я каждого из н их
вызов wаi t.
Сигн ал ы
С и г н ал ы - это за просы н а п р е р ы ва н и е , реал изуе м ые н а уро в н е процессов.
Существуют свыше тридцати различных сигналов, и они находят самое разное приме­
нение.
•
Сигналы могут посылаться между процессами как средство коммуни кации .
•
Сигн ал ы могут посылаться драй вером тер м инала для уничтожения ил и приоста­
новки процессов, когда пользователь нажимает специальные комбинации клави ш ,
такие как <Ctrl+C> и л и < Ctrl+Z>4•
•
Сигналы могут посылаться в самых разных целях пользователем или адм и нистра­
тором с помощью команды kill.
•
Сигналы могут посылаться ядро м , когда процесс выполняет недопусти мую и н ­
струкцию, например деление н а нуль.
•
Сигналы могут посылаться ядром для уведомле н ия процесса о " представляющем
интерес " событии , таком как пре кращение дочернего процесса или доступность
данных в канале ввода-вывода.
W Дам п памяти - это файл , содержащий образ памяти процесса. Его можно испол ьзовать
для отладки .
Когда поступает сигнал , возможен оди н из двух вариантов развития событий . Если
процесс назначил сигналу подпрограмму обработки , то после вызова ей предоставляется
информация о контексте, в котором был сгенерирован с игнал. В проти вном случае ядро
выполняет от и м е н и процесса действия, заданные по умолчанию. Эти действия зависят
от сигнала. М ногие с и гн ал ы приводят к заверше н и ю процесса, а в некоторых случаях
при этом еще и создаются дам п ы памяти.
4Функци и , связан ные с комбинациям и клави ш < Ctrl+Z> или <Ctrl + C > , мо�уг назначаться други м
клави шам с помо щ ью команды s tty, но на практике такое встречается очень редко. В этой главе
мы подразумеваем , что с данными клавишами связаны их стандартные функци и .
Часть 1. Основы администрирования
1 32
П роцедура вызова обработч и ка называется перехватом сигнала. Когда выпол н е н и е
обработчи ка завершается , п роцесс возобновляется с той точ ки , где б ы л получе н сигнал.
Для того чтобы определенн ые с и гнал ы не поступал и в програм м у, н ужно задать их
и гнорирование ил и блокирование. И гнорируемый сигнал просто пропускается и н е вли­
яет на работу процесса. Блокируемый сигнал ставится в очередь на обработку, но ядро не
требует от процесса н и каких действ и й до я вного разблокирования с игнала. Обработч и к
вызы вается DJIЯ разблокированного си гнала только оди н раз, даже если в течение перио­
да блокировки поступило несколько аналогичных сигналов.
В табл . 4. 1 перечисле н ы сигнал ы , которые должны быть известны л юбому системно­
му адм и н истратору. Традиционно и мена сигналов записываются про п ис н ы м и буквами.
И ногда к именам добавляется префикс SIG ( например, S I GHUP).
Табпи ца 4. 1 . Сиrнапы, которые допжен знать каждый администратор•
№' Имя
1
2
з
9
10
11
15
17
18
19
28
30
31
HUP
Описание
Отбой
Пре рывание
QU I T
Выход
K I LL
Уничтожение
BUS
Ошибка на шине
S EGV
Ошибка сегментации
ТЕRМ
Запрос на завершение
STOP
Остановка
TSTP
Сигнал остановки, посылаемый с клавиатуры
CONT
Продолжение после остановки
W I NCH Изменение окна
U S Rl
Определяется пользовател ем
U S R2
Определяется пользовате л е м
INT
Реа кция
Дамn
ПО yмD.llЧ8HMIO
ПереХ88ТЫ веется ?
&покируетсt1?
Завершение
Завершение
Завершение
Завершение
Завершение
Завершение
Завершение
Остановка
Остановка
�
�
�
�
�
�
Нет
Нет
Нет
�
�
�
�
�
�
�
�
Нет
Нет
�
�
Нет
Нет
Нет
Игнорируется
�
Нет
Нет
Игнорируется
Завершение
�
�
�
�
Нет
Нет
Завершение
�
�
Нет
памяти?
Нет
Нет
�
" Список назван ий сигналов и номеров также можно получить с помощью встроенной в оболочку bash команды
kill - 1 .
"
Зависит о т используемой системы . Подробнее с м . файл /usr/ include/ s ignal . h или тап-страницы интерак-
тивного руководства для системного вызова s i g n a 1 ( ) .
Существуют и другие сигнал ы , н е показа н н ые в табл . 4. 1 ; большинство из н их со­
общает о загадоч ных ошибках, например " н е верная и нструкция " . По умолчани ю та ­
кие сигнал ы , как правило, приводят к завершению программы и созданию дампа ядра.
П ерехват и блокирование сигналов обыч н о разрешен ы , так как есть достаточно "ум­
ные" програм м ы , устраняющие последствия ошибок.
Сигн ал ы вus и S E GV также посылаются при возни кнове н ии ошибок. Мы вкл юч ил и
их в таблицу, поскольку они чрезвычайно распространены: обы ч но программа аварийно
заве ршается именно из-за н их. Сам и по себе эти си гнал ы н е и м е ют диагностической
цен ности . Они лишь указы вают на факт неправил ьного обращения к памяти .
С и гнал ы K I L L и S T O P н ел ьзя ни перехватить, н и заблокировать, н и проигнориро­
вать. Сигнал K I LL приводит к уничтожен и ю процесса, которому он посылается, а сиг-
глава 4. Управление п роцессами
1 33
нал S T O P приостанавл ивает выполнение процесса до получения сигнала CON T . Сигнал
CONT можно перехватить и проигнорировать, но н ел ьзя заблокировать.
С игнал T S T P представляет собой более " гибкую" версию сигнала S T O P . Проще всего
описать е го как запрос на остановку. Он ге нерируется драйвером терм инала при нажа­
тии пол ьзователе м комбинации клавиш < Ctrl + Z > . П рограмм ы , перехватывающие этот
сигнал , обычно выполняют операции очистки , а затем посылают сам и себе сигнал STOP.
С другой сторо н ы , программы могут и гнорировать сигнал T S T P , чтобы их нельзя было
остановить командой с клавиатуры .
Хотя назначение сигналов K I LL , I N Т , TERM, HU P и QU I T может показаться одинако­
в ы м , в действительности они совершенно разные.
•
•
•
•
•
•
•
Сигнал K I L L не блокируется и приводит к безусловному завер ш е н и ю процесса
на уровне ядра. П о сути, процесс не успевает даже принять этот сигнал.
Си гнал I N Т посылается драй вером терм инала п р и н ажатии пол ьзователем ком ­
бинации клавиш < Ctrl + C > и служит запросом н а завершение текущей операции .
П ерехватив этот сигнал , простые программы должны заверш ить работу или позво­
л ить ун ичтожить себя стандартному обработчи ку сигнала. Програм м ы , в которых
есть интерактивный режим командной строки, должны прекратить текущую опе­
рацию, выполн ить оч истку и снова перейти в режим ожидания.
Сигнал ТЕRМ представляет собой запрос на завершение програм мы. П редполагается ,
что процесс , получ и вший этот сигнал , осуществляет очистку и завершается.
У сигнала HU P есть две распространен ные интерпретаци и . Во- первых, м ногие де­
мон ы воспринимают е го как команду сброса. Если демон способен повторно про­
честь свой конфигурационн ы й файл и адаптироваться к изме н е н и я м без переза­
пус ка, с игнал HUP позволяет менять его поведение.
Во-вторых, этот с и гнал иногда генерируется драйвером терминала при попытке
уничтожить с вязан ные с терм иналом процесс ы . В основном это поведен и е сохра­
н илось со времен испол ьзовани я проводных соедине ний терм и налов и модемов.
Отсюда и название " отбо й " .
Оболочки семейства С (tcsh и другие) обычно делают фоновые процессы невос­
приимчивыми к сигналу HUP, чтобы они могл и продолжать свою работу, даже когда
пользователь выходит из системы. Пол ьзователи оболочек семейства Bourne ( k s h ,
bash и так далее) могут эмул ировать такое поведение с помощью команды nohup.
Сигнал QU I T напоминает сигнал T E RM , за искл ючением того , что по умолчанию
стандартный обработчи к создает дам п памяти .
Сигналы U S R l и U S R 2 не имеют стандартного назначения. И м и можно пользоваться
в различных целях. Например, веб-сервер Apache и нтерпретирует сигнал нuв как запрос
на немедле н н ы й перезапуск. Сигнал U S R l иници ирует более плавн ы й переход, в ходе
которого разрешается закончить сеансы связи существующего клиента.
Кома нда kill: отп ра вка сигналов
Команду k i l l чаще всего испол ьзуют дл я уничтожения процессов. Эта команда мо­
жет послать процессу л юбой сигнал , но по умолчанию это с игнал T E RM. Команду k i l l
могут выпол н ять к а к рядовые пол ьзовател и (для своих собствен н ы х п роцессов) , так
и суперпользовател ь (для любого процесса). Она имеет следующий с и нтаксис:
kill [ - сигна л ] p i d
Часть 1. Основы администрирования
1 34
где сигнал
это номер ил и с и м вол ическое имя посылаемого си гнала (см. табл . 4. 1 ) ,
а pid
иде нтификацион н ы й номер целевого процесса.
Команда kill без номера сигнала не гарантирует, что процесс будет уничтоже н , по­
с кольку сигнал TERM можно перехватывать, блокировать и и гнорировать. Команда
$ kill - 9 p i d
-
-
" гарантированно" уничтожает процесс, так как сигнал с номером 9 ( K I LL) не перехваты­
вается. Используйте команду kill - 9 тол ько в случае , есл и " вежл ивый" запрос на за­
вершение программ ы не был выполнен. М ы написали слово " гарантированно" в кавыч­
ках, так как иногда процессы переходят в такое состояние, в котором их нельзя завершить
даже таким способом (обыч но это связано с блокировкой ввода-вы вода, например при
остановке жесткого диска). Единственный выход в такой ситуации - перезагрузка.
Команда k i l l a l l уничтожает п роцессы , заданные именем. Например, следующая
команда уничтожает все процессы веб-сервера Apache.
$ sudo killall httpd
Команда pki l l осуществляет поиск п роцессов, зада н н ых и м е н а м и (или други м и
атри бута м и , напр и м ер E U I D) , и посылает найде н н ы м п роцессам с и гнал . Например,
следующая команда посылает сигнал T E RM всем процессам , выпол н яе м ы м от и м е н и
пол ьзователя b e n .
$ sudo pkil l - u Ьеn
Состо я ни я п роцессов и потоков
Как показано в предыдущем разделе , процесс может быть приостановлен сигналом
STOP и возвращен в активную нагрузку с сигналом CONT. Состоян ие приостановления или
выполнения применяется к процессу в целом и наследуется всем и потоками процесса. 5
Даже при ном и н ал ьнqм запуске потоки часто должн ы ждать, пока ядро заверш ит
какую-то фоновую работу дпя них, прежде чем они смогут продолжить выпол н е н ие .
Например, когда поток считы вает дан ные из файла, ядро должно запраш ивать соответ­
ствующие блоки диска, а затем упорядочи вать их содержимое для доставки в адресное
пространство процесса запроса. В течение этого времени запрашивающий поток входит
в состояние краткосрочного спящего режима, в котором он не может быть выпол не н .
Однако другие потоки в одном процессе могут продолжать работать.
Существуют процесс ы , которые называют "спящи м и " (например, в вы воде резул ь­
татов работы команды ps - см. следующий раздел ) . Поскол ьку атрибут сна относ ится
к потоку, этот термин немного обманчив. Обычно процесс считается спящим, когда все
его потоки я вл я ются спящими. Разумеется , различие остается спорным в случае одно­
поточных процессов, которые представляют собой наиболее распространен н ы й случай .
И нтерактивные оболоч к и и систе м н ые демоны проводят большую часть вре м е н и ,
ожидая ввода дан н ых с терминала ил и сетевых подкл юче н и й . Поскольку спящий поток
эффективно блокируется до тех пор, пока его запрос не будет удовлетворен , его процесс
обычно не получает н и какого процессорного вре м е н и , если он не получает сигн ал или
ответ на оди н из с воих запросов ввода-вывода.
W Дополн ител ьную и нформацию об инсталляции файловой систе м ы N FS с параметром
hard см. в разделе 2 1 .4.
5Аналоrичным образом можно управлять отдел ьными потока м и . Однако эти объе кты в первую
очередь п редста вл я ют и нтерес дл я разработч и ков; с и сте м н ы е адм и н и страторы н е должны
беспокоиться по этому поводу.
Глава 4. Управление процессами
1 35
Н е которые операци и могут привести к тому, что процессы ил и потоки войдут в со­
стоя ние беспробудного сна. Это состояние обычно я вляется переходн ы м и не набл ю­
дается в резул ьтате работы команды p s (оно обозначается бук вой D в столбце S T A T ,
с м . табл . 4 . 2 ) . Однако нескол ько специфических ситуаций могут привести к тому, что
это состоян ие станет постоя н н ы м . Наиболее распростране нная причина с вязана с про­
бл е м а м и сервера в файловой систе м е N FS , и нсталл ирован ной с параметром h a r d .
П ос кольку процессы в состоянии беспробудного сна н е могут просыпаться даже дл я об­
служивания с и гнала, они не могут быть пре краще н ы . Ч тобы избавиться от н и х , в ы
должн ы устран ить основную проблему или перезагрузить ком пьютер.
4.3 . КОМАНДА Ps: ТЕКУЩИЙ КОНТРОЛЬ ПРОЦЕССОВ
Команда ps
основной инструмент, которым систе м н ы й админ истратор пол ьзует­
ся дл я текуще го контроля процессов. Версии этой команды различаются аргумента м и
и выходны м формато м , н о , п о сути , выдают одну и т у ж е и нформацию. В основном ,
различие в версиях - это следствие разных путей развития систем U N IX. Кроме того ,
поставщики систем могут настраи вать эту команду с учетом конфигурации системы, так
как она тесно связана с особен ностям и обработки процессов в ядре и поэтому часто от­
ражает изменен ия в ядре.
С помощью команды ps можно пол уч ить и нформацию об иде нтификаторах P I D ,
U I D , приоритете и управляющем терм инале того или и ного процесса. О н а также по­
зволяет выяснить, какой объем памяти использует процесс, сколько вре м е н и централь­
ного процессора заняло е го выпол н е н и е , каково е го текущее состоян и е (выпол няется ,
остановл е н , простаи вает и т.д. ) . П роцессы-зомби в л истин ге команды обозначаются как
< e x i t i n g > или <de fun c t > .
Команда ps безнадежно усложн илась з а последние нес кол ько лет. Не которые по­
ставщики оставил и попытки стандартизировать выходной формат этой команды и сде ­
лал и ее пол ностью конфигурируемой. Проведя небольшую настрой ку, можно получить
практически л юбые требуе м ые результаты.
-
В с истеме Linux команда ps я вля ется настоящ и м хамелеоном и понимает
наборы опций из ряда других систе м . В отличие от остальн ых команд с и ­
сте м ы U N IX, команда p s в систе ме Linux восприн и мает флаги командной
строка как с дефисом , так и без дефиса, хотя их интерпретация может ока­
заться разной . Например, результат выполнения команды ps - а отличается
от результата выпол нения команды ps а.
Не пугайтесь всех этих сложносте й : пусть они будут кошмаром разработч и ков ядра,
а не системных админ истраторов! Дпя повседневной работы достаточ но знать л и ш ь н е ­
скол ько наиболее важных опций команды p s .
П олучить сп исок всех процессов, в ы полняющихся в с истемах, можно с помощью
команды ps aux. Ключ а означает, что мы хотим увидеть все процесс ы , кл юч х
что
мы хотим увидеть даже процессы, отсоединенные от управляющего тер м инала, а кл юч u
обес печивает фил ьтрование по имени или идентификатору пользователя , который запу­
стил программу. Н иже показаны результаты работы команды ps aux в с исте ме Red Hat .
-
r e dh a t $ p s aux
U S E R P I D % C PU % МЕМ
0.1
0.2
root
1
о
о
root
2
о
root
3
о
vsz
3356
RSS
560
о
о
о
о
ТТУ
?
?
?
S ТАТ
s
SN
S<
T I ME
0 : 00
0 : 00
0 : 00
СОММАND
init [ 5 ]
[ ksofti rqd/ 0 ]
[ even t s / 0 ]
Часть 1. Основы администрирования
1 36
root
root
root
root
4
5
18
28
о
о
о
о
root
root
root
root
root
root
root
root
root
root
root
196
1050
1472
1646
1733
2 12 4
2 1 82
2186
2519
2384
2419
о
о
о
о
о
о
о
о
о.о
о
о
о
о
о
о
о
о
о
о
о
о
о
о
?
?
?
?
о
?
?
?
?
?
?
?
?
?
?
?
о
о
0.1
0.3
0.3
2 652
448
3048 1008
3012 1012
о
о
о
3004 1008
596
2 2 64
484
2 952
о . о 17036 380
0 . 6 4080 1 660
1 . 1 7776 3004
0.3
0.2
о.1
S<
S<
S<
s
s
S<s
S<s
S<s
s
Ss
Ss
Ss
Ss
Ss
Ss
0 : 00
0 : 00
0 : 00
0 : 00
[ kh e l p e r ]
[ ka c p i d ]
[ kЫ o c kd / O J
[ pd f l u s h ]
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
[ kj ou r n a l d ]
udevd
/ s Ь i n / dhc l i e n t - 1
/ s Ь i n / dh c l i e nt - 1
[ kj o u r na l d ]
/ s Ь i n / dhc l i en t - 1
s y s l o gd -rn О
k l o g d -х
/ u s r / s Ьi n / a t d
/ u s r / s Ь i n / s s hd
s e ndrna i l : a c c e p t
Команды , имена которых закл юче н ы в квадратные скобки, в действительности явл я ются н е ком а нда м и , а потокам и ядра, запланирова н н ы м и в качестве процессов.
Оп исание полей приведено в табл . 4. 2 .
Еще одна полезная аббревиатура, lax, предоставляет допол н ительную техническую
информацию. Ключи а и х описан ы выше (отображают все процесс ы ) , а кл юч 1 означает выбор " длин ного" формата вы вода дан ных. Команда ps lax выполняется быстрее ,
чем команда p s aux , т а к к а к не сопоставляет иде нтификаторы процессов с и м е н а м и
пользователей. Это может оказаться весьма важны м фактором , есл и система уже перегружена каким-то процессом.
Таблица 4 . 2 . Пояснени11 к результатам работы команды ps aux
Попе
Содержимое
USER
И м я владельца процесса
Идентификатор процесса
Доля времени центрального процессора (в процентах) , выделенная процессу
Часть реальной памяти (в процентах) , используемая процессом
Виртуальный размер процесса
Размер резидентного набора (количество страниц памяти )
Идентификатор управляющего терминала
Текущий статус процесса:
R
выполняется ,
D - ожидает записи на диск,
s - неактивен (< 20 с),
т
приостановлен,
z - зомби.
Дополнительные флаги:
w
процесс выгружен на диск,
< - процесс имеет повышенный приоритет,
N - процесс имеет пониженный приоритет,
L - некоторые страницы блокированы в ядре ,
s - процесс является лидером сеанса.
Количество времени центрального процессора, затраченное на выполнение процесса
Имя и аргументы команды•
РI D
% C PU
% МЕМ
vsz
RSS
ТТУ
S TAT
-
-
-
T I ME
C OMMAND
• п рограммы могут модифицировать эту информацию, так что она не всегда точно представляет реальную команд­
ную строку.
Глава 4. Управление п роцессами
1 37
Н иже приведе н ы резул ьтаты работы аббревиатуры p s l a x . О братите в н имание
н а допол нительные поля P P I D ( идентификатор родител ьского процесса ) , N I (фактор
уступч и вости) и WCHAN ( ресурс , которого ожидает процесс) .
r e dha t $ ps lax
F UID
P I D P P I D PRI N I vs z RS S
4
1
о 16
о 3356 560
о
1
1
2
19
о
о
о
34
1
1
о
3
5 -10
о
о
1
о
3
о
5 -10
о
4
1
5
о 2952 484
16
о 2186
1
5 32 2207
о 2824 580
15
1
5 2 9 2227
о 2100 760
18
1
1
о 2260
16
о 5668 1084
1
1 21
о 2336
о 3268 556
5
1
о 2384
17
о 4 0 8 0 1 6 60
1
1
о 2780 828
15
о 2399
5
1
о 7776 3004
16
о 2419
WCHAN
select
ksofti
wo r k e r
wo r k e r
syslog
select
select
select
select
select
S TAT
s
SN
S<
S<
Ss
Ss
Ss
Ss
Ss
Ss
Ss
Ss
T I ME
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
0 : 00
СОММАN D
init [ 5 )
[ ks o f t i rqd / 0
[ ev e nt s / O J
[ kh e l p e r )
k l ogd -х
p o r tmap
rpc . s t a t d
rpc . i dmapd
acpid
s s hd
xinetd -sta
s en dma i l : а
В командах с дл и н н ы м и спискам и аргументов вывод командной строки может быть
откл ючен. Чтобы отобразить на выходе больше столбцов, добавьте флаг w. Чтобы снять
ограничения с ш ирины столбца, добавьте флаг w дважды ; это удобно дл я тех процессов,
которые имеют исключител ьно дл инные аргуме нты командной строки, напри мер неко­
торых Jаvа-приложений.
Адм и н истраторам часто необходимо идентифицировать P I D п роцесса. В ы можете
найти P I D, применив команду grep к результатам работы команды ps:
$ ps aux 1 grep s shd
root
68 1 1 О . О О . О 78056 1340
?
S s 1 6 : 0 4 0 : 0 0 / u s r / sb in / s s h d
bwh a l e y 1 3 9 6 1 О . О О . О 1 1 0 4 0 8 8 6 8 p t s / 1 S + 2 0 : 3 7 0 : 0 0 g r e p / u s r / sb in / s s h d
Обратите вн и мание на то, что резул ьтаты работы команды ps вкл ючают в себя ко­
м анду grep , так как процесс grep был активен во врем я выпол н е н и я p s . В ы можете
удалить эту строку из вывода с помощью команды grep -v:
$ ps
root
aux
1 grep -v grep 1 grep sshd
68 1 1 О . О О . О
78056 1340?
S s 1 6 : 0 4 0 : 0 0 / u s r / sb in / s s hd
Можно также определить P I D процесса с помощью команды pidof:
$ pidof /usr/ sbin/sshd
681 1
Кроме того, можно примен ить утилиту pgrep:
$ pgrep s shd
681 1
Команда pidof и утилита pgrep демонстрируют все п роцессы , соответствующие
переданной строке. Часто обычная команда grep обеспечивает макс имальную гибкость,
хотя ее результаты могл и бы быть чуть подробнее.
4.4. И НТЕРАКТИВНЫЙ МОНИТОРИНГ ПРОЦЕССОВ
С ПОМОЩЬЮ КОМАНДЫ ТОР
Команды , аналогичные ps, позвол я ют сделать моментальный с н и мок состоя н ия си­
сте м ы , но получить полную картину всего происходяшего в ней довольно сложно. Для
часть 1. Основы администрирования
1 38
этого служит с вободно рас пространяемая утил ита top , которая работает во м ногих си­
стемах, регулярно об новляя с водку акти вных п роцессов и испол ьзуе мых и м и ресурсов.
Рассмотрим пример.
r e d h a t $ top
t op - 2 0 : 0 7 : 4 3 up 1 : 5 9 , 3 u s e r s ,
T a s k s : 2 5 1 t o t a l , 1 runn i n g , 2 5 0
% Cpu ( s ) : 0 . 7 u s , 1 . 2 s y , О . О n i ,
128304
K i B Mem : 1 0 1 3 6 7 2 t o t a l ,
K i B Swap : 2 0 9 7 1 4 8 t o t a l , 2 0 8 9 1 8 8
PID
2731
25721
25296
747
846
1647
1 02 4 6
1
2
3
5
7
8
9
U S ER
root
u l s ah
u l s ah
root
root
root
ul sah
root
root
root
root
root
root
root
NI
V I RT
о
20
о
20
о
20
о
20
о
20
о
20
о
20
о
20
о
20
о
20
о -20
19331 6
619412
2 60 7 2 4
4 372
141744
177436
130156
59620
о
о
о
о
PR
rt
20
20
о
о
о
l o a d ave r a g e : 0 . 4 5 , 0 . 1 6 , 0 . 0 9
s l e ep i n g , О s t opp e d , О z om Ы e
9 8 . 0 i d , о . о wa , о . о h i , О . 2 s i , о . о s t
f r e e , 5 4 7 1 7 6 u s e d , 3 3 8 1 9 2 b u f f / c a che
7 9 6 0 u s e d . 2 4 2 5 5 6 ava i l Мет
free ,
RES
34848
272 1 6
6068
604
384
3656
1936
5472
SHR
15184
17636
3268
504
1 92
2 632
1256
3348
о
о
о
о
о
о
о
о
о
о
о
о
о
о
s % C P U % МЕМ
s 1.7
3.4
1.0 2.7
s
0.6
s 0.7
s 0.3 0.1
s 0.3 о.о
s 0.3 0.4
R 0.3 0.2
s о.о 0.5
s
s
s
s
s
s
о.о
о.о
о.о
о.о
о.о
о.о
о.о
о.о
о.о
о.о
о.о
о.о
T I ME+
COMМAND
0 : 3 0 . 3 9 Xorg
0 : 0 3 . 67
kon s o l e
0 : 1 7 . 7 8 prlcc
0 : 02 . 68
rngd
0 : 0 1 . 7 4 p r l t oo l s d
0 : 0 4 . 4 7 cup s d
0 : 0 0 . 1 0 t op
0 : 0 2 . 0 9 s y s t emd
0 : 0 0 . 02
k t h r eadd
0 : 0 0 . 0 3 k s o f t i r qd / O
0 : 0 0 . 0 0 kwo r ke r / 0 : +
0 : 0 0 . 2 0 mi g r a t i on / 0
0 : 00 . 00
r c u bh
0 : 00 . 00
rcuoЬ / 0
П о умолчанию эта информация обновляется каждые десять секунд. Наиболее акти в­
н ы е процесс ы отображаются первыми. Ком анда top позволяет также посылать процес­
сам сигналы и испол ьзовать команду renice , чтобы пользователь мог набл юдать за тем ,
как его действи я вл и я ют н а общее состоян ие систе м ы .
Сводная и н формация в первых нескол ьких строках верхнего выхода - одно из пер­
вых мест для анализа состоя н ия с исте м ы . Оно в сжатом виде отражает загрузку систе м ы ,
испол ьзован ие памяти , кол ичество процессов и испол ьзован ие процессора.
В м ного яде р н ы х с исте мах ис пол ьзова н и е це нтрального процессора усредн яется
по все м ядрам . В системе Linux н ажм ите клавишу 1 (номер оди н ) , пока команда top
предлагает переключ иться м ежду ядра м и . В системе Free B S D для достиже н и я того же
эффекта выполн ите команду top Р 6
Суперпол ьзовател ь может в ы п ол н ять команду top с параметром -q, чтобы довести
е го до макс и м ал ьн о возможного приоритета. Этот парам етр может б ыть полезен , есл и
вы пытаетесь отследить процесс , которы й уже привел систему в состоя ние сбоя .
Н а м также нравится програ м м а htop , кросс-платформен н ы й и н терактив н ы й п ро­
смотрщи к процессов с открытым исходны м кодо м , предлагающий бол ьше возможно­
стей и и м е ющий более удобн ы й и нтерфейс, чем top. Она пока н едоступна в качестве
пакета в наших иллюстративных системах, но вы можете загрузить двоичную или исход­
ную версию с веб-сайта разработч и ка по адресу h i s ham . hm / h t o p .
-
.
r. В с и ст е м а х Free B S D м о ж н о уста новить п е р е м е н н у ю окруже н и я Т О Р , чтобы п е редать
доп ол н ительные аргументы ком анде top . Мы рекомендуем испол ьзовать параметр -н, показать
все потоки для м ноrопоточн ы х п р оц ес сов , а не просто сводную и нформацию, а также параметр
-Р для отображен ия всех ядер п р оце сс ора . Добавьте в файл и нициализации оболочки строку ТОР=
11 -НР " , чтобы эти изменения сохранялись между сеансами оболочки .
Гл ава 4. Управл ение процессами
1 39
4.5. КОМАНДЫ NICE И RENICE : ИЗМЕНЕНИЕ
ПРИОРИТЕТА ВЫПОЛНЕНИЯ
Фактор уступчи вости - это ч исло , по которому ядро определяет свою пол ит и ку
в отн о ш е н и и процессов, кон кур и рующих за право доступ а к центральному процес­
сору. 7 Чем выше фактор уступчивости , тем н иже приоритет процесса и н аоборот, от­
с юда и назван и е тер м и н а . Н изкое или отрицател ьное значен и е озн ачает испол ьзова­
н и е высоко го приоритета : процесс ведет себя н е сли ш ком усту п ч и во .
В настоящее врем я адми н истраторам редко приходится определять приоритеты вруч­
ную. Сегодня , когда на рабочих столах стоят нам ного более быстродействующие ком­
п ьютер ы , с исте м н ы й план ировщи к , как правило , обслуживает все процессы вес ьма
оперативно. Добавление классов пла нирования предоставляет разработчи кам дополни­
тельные средства управления в тех случаях, когда важна быстрая ответная реакция.
Диапазон допустимых значен и й фактора уступчивости зависит от используемой си­
сте м ы . В частности , в системе Linux испол ьзуется диапазон от -20 до + 1 9 , а в с исте ме
FreeBCD - от -20 до +20.
Есл и пол ьзователь н е предпринимает специальных мер, дочерн и й процесс наследует
приоритет своего родительского процесса. Владелец п роцесса может увел и чить фактор
уступчи вости, но не может уменьшить е го, даже чтобы вернуться к стандартному значе­
н ию. Это не позволяет процессам с н изки м приоритетом порождать высокоприоритет­
ных потомков. Однако суперпользователь может устанавл ивать произвольные значения
фактора уступч и вости.
К сожалению, уровен ь производительности подсистем ы ввода-вывода растет н е так
стрем ител ьно, как быстроде йствие центральных процессоров , поэтому жесткие диски
стал и основным узким местом в большинстве операционн ых систе м . Фактор уступчи­
вости н и как не влияет на подсисте м ы управления памятью и вводом-выводом , поэтому
даже н и зкоприоритетн ы й процесс способен монополизировать эти ресурсы или захва­
тить непропорционально бол ьшую их ч асть.
Фактор уступчивости можно установить при создании процесса. Это делается с по­
мощью команды nice. Команда renice позволяет изменять приоритет выполняемого
процесса. Первая из этих команд прини мает в качестве аргумента строку запус ка про­
цесса, а вторая - идентификатор процесса л ибо имя пользователя .
Приведем примеры.
$ nice -n 5 �/bin/ lonqtask
$ sudo renice -5 8 8 2 9
$ sudo renice 5 -u boqqs
11
11
11
11
11
Понижаем приори т е т ( ув еличив а е м
фа ктор ус т упчив о с т и ) на 5
Задаем фак тор ус тупчи вости р а вн ым - 5
З а д а ем ф а к т ор ус тупчи в о с т и проце с с о в
поль з о в а т е л я " b o gg s " р а вным 5
К сожалению, в системах по-разному реализован способ установки желаемого приори­
тета; более тоrо, даже в рамках одной и той же системы не согласованы механизмы действия
команд nice и renice. Ситуацию усложняет то, что существует версия команды nice,
встроенная в оболочки языка С и ряд других популярных интерпретаторов (за исключением
bash). Если не указать полное имя команды, будет вызвана именно встроенная версия, а не
систем ная. Для того чтобы избежать неоднозначности, рекомендуется использовать полный
путь к систем ной версии команды, который можно найти в файле /usr/bin/nice.
' Команда n i ce определяет только приоритет ис пользован и я центрального процессора. Для
управления приоритетами ввода-вывода используется команда ionice.
Часть l . Основы администрирования
1 40
Все эти варианты приведен ы в табл . 4. 3 . Элемент приор для среды, в которой вызы­
вается команда n i ce или ren i c e , означает абсол ютное значе ние фактора уступч и вости ,
а инкр
относительное. Знаки " плюс " в команде nice обязательн ы только для и нтер­
претатора ком анд; в остал ьн ых случаях они и гнорируются.
-
Таблица 4 . 3 . Как выражаются приоритеты в различных версиях команд nice и renice
Система Диапазон
Uпux
-20- 1 9
FreeBSD
-20-20
ОС-команда nice Команда nice в оболочке csh
-n инкр
-n инкр
+инкр или - инкр
+ инкр или - инкр
Команда renice
приор или -n приор
инкр или -n инкр
4.6. ФАЙЛОВАЯ СИСТЕМА /proc
Верс и и команд ps и top считывают информацию о состоян и и процессов из
каталога /proc - псевдофайловой системы, в которой ядро помещает бол ь­
шой объем и нтересной информации о состоянии систе м ы .
Н ес мотря на и м я /proc ( и имя базового т и п а файловой систе м ы
" p r o c " ) , хра­
ня щаяся в этом каталоге и нформация не огран ичивается одн и м и л и ш ь п роцессами здесь хранится вся информация о состоян и и и статистические сведе н ия , генерируемые
ядром . Н е которые параметры можно даже изменять, записывая новые значения в соот­
ветствующий файл каталога /proc, - ряд примеров приведен в разделе 1 1 . 4.
Хотя бол ьшую часть информации проще получать с помощью таких интерфейс н ых
команд, как vmstat и p s , некоторые дан ные придется сч итывать непосредственно из
каталога /proc. Следовател ьно, целесообразно просмотреть его, чтобы ознакомиться со
всеми помеще н н ы м и в него файлами . Команда man proc позволяет ознаком иться с ря ­
дом полезных советов и приемов.
П ос кольку ядро создает содержимое файлов каталога /proc н а лету ( во вре мя их
считы вания) , бол ьшинство из н их выглядят пустыми при их открытии с помощью ко­
манды ls - 1 . Для просмотра действител ьного содержи м ого этих файлов п ридется
прибегнуть к командам cat или les s . Однако будьте осторожн ы : некоторые файлы со­
держат двоичные данные либо ссылаются на двоичные дан ные, непосредствен н ы й про­
смотр которых может поставить в туп и к эмулятор терминала.
И нформация , относящаяся к кон кретн ы м процессам , рас пределена по подкатало­
гам , названн ы м по идентификаторам процессов. Например, каталог /proc/ 1 всегда со­
держит и нформацию о демоне ini t. Н аиболее полезн ые файл ы с и нформацией о п ро­
цессах перечислен ы в табл . 4.4.
-
Таблица 4.4. Файлы с информацией о процессах каталога /proc
(нумерованные подкаталоги)
Файл
Содержимое
cqroup
Группа управления , которой принадлежит процесс
Cllld
Команда или программа, выполняемая процессом
cmdline• Полная командная строка процесса (разделенная нулями)
cwd
Символическая ссылка на текущий каталог процесса
environ
Переменные среды процесса (разделенные нулями)
ехе
Символическая ссылка на файл , который должен выполняться
Глава 4. Уп равление процессами
1 41
Окончание табл. 4.4
Файп
Содержимое
fd
Подкаталог, содержащий ссылки на дескрипторы каждого открытого файла
fdinfo
maps
ns
root
s tat
s tatm
Подкаталог, содержащ и й дополн и тельную информаци ю о дескрипторах каждого открытого
файла
И н формация отображения памяти (сегменты совместного использования , библиотеки и т. п . )
П одкаталог, содержащий ссылку на пространство имен каждого открытого файла
С имволическая ссылка на корневой каталог процесса (определенный командой chroot)
Информация об общем состоян ии п роцесса (для ее получения лучше всего использовать ко­
манду рs)
Информация об и спользовании памяти
·может быть недоступна, если запись информации о процессе выполняется из памяти .
Отдельные ком поненты внутри файлов cmdline и envi ron разделе н ы с и м волами
нул я , а не сим волами перевода строки. Для того чтобы и х содержимое было более ч ита­
бельным, его м ожно фильтровать с помощью команды tr " \ 0 0 0 " 11 \ n " .
В подкаталоге fd откр ытые файлы представл е н ы с и м вол ически м и ссылкам и .
Дескри пторы файлов, которы е связан ы с каналами ил и сете вы м и сокета м и , н е имеют
связанных с н и м и и м е н файлов. Вместо этого в качестве целевой ссыл к и ядро предо­
стамяет обобщенное описание.
Файл maps полезен при определении библ иотек, с которы м и связана или от которых
зависит та или и ная програм ма .
В с истеме Free B S D также испол ьзуется файловая система на основе ката­
лога /proc . Однако она объя влена устаревшей. По соображен и я м совме­
стимости ее все е ще можно смонтировать, но только не по умолчанию. Для
этого можно вы полн ить командук
f r e e b s d $ sudo mount -t procfs proc /proc
Схема файловой системы похожа на версию файловой системы proc f s в системе Linux,
но не совпадает с ней. И нформация о процессе включает в себя его состояние, символи­
ческую ссьш ку на выполняемый файл , детали виртуальной памяти, выделенной процессу,
а также другую подробную информацию (см . также справочную страницу man procfs).
4.7. КОМАНДЫ STRACE и TRUs s : ОТСЛЕЖИВАНИЕ
СИГНАЛОВ И СИСТЕМНЫХ ВЫЗОВОВ
И ногда определение действий , действител ьно выполняемых дан н ы м процессом, мо­
жет быть затруднительны м . Умозаключение приходится делать на основе косвенных дан­
ных, полученных от файловой системы и с помощью таких средств, как программа ps.
Есл и источ н иков и нформации недостаточ но, можно не посредственно следить за
процессами с помощью команд s trace ( в системе Linux она предоставляется в виде
допол нительного пакета) ил и tru s s (в с исте ме Free B S D ) . Эти команды отображают
каждый систе м н ы й вызов, выполняемый процессом, и каждый получаем ый им сигнал.
"Чтобы автоматически монтировать файловую систему /proc во время загрузки , добавьте в файл
в /etc/fstaЬ строку proc /proc procfs rw О О .
Часть 1. Основы администрирования
1 42
Команды s trace и truss можно связать с выполняемым процессом , последить за н и м
в течение н екоторого времени, а затем отключиться от процесса, не прерывая е го9•
Хотя с исте м н ые вызовы выполняются на сравнительно н изком уровне абстракци и ,
обычно вывод команды s trace позволяет получить достаточно полную и нформацию
об активности процесса. Например , следующий журнал был получе н в резул ьтате вы­
полнения команды strace применительно к активной копи и команды top (выполняе­
мой с идентификатором PID, равным 5 8 1 0) .
r e dh a t $ sudo s trace - р 5 8 1 0
ge t t ime o fda y ( { 1 1 1 6 1 9 3 8 1 4 , 2 1 3 8 8 1 ) , { 3 0 0 , О ) )
ope n ( " /p r oc " , O_RDONLY I O_NONBLOC K I O_LARG E F I LE I O_ D I RECTORY )
f s t a t 6 4 ( 7 , { s t _mode=S _ I FD I R I 0 5 5 5 , s t s i z e = O , . . . ) )
f c n t l 6 4 ( 7 , F_ S E T F D , FD_C LOEXEC )
ge t d e n t s 6 4 ( 7 , / * 3 6 e n t r i e s * / , 1 0 2 4 )
ge t den t s 6 4 ( 7 , / * 3 9 e n t r i e s * / , 1 0 2 4 )
s t a t 6 4 ( " / p r o c / 1 " , { s t_mo de=S _ I FD I R I 0 5 5 5 , s t s i z e = O , . . . )
ope n ( " /p r oc / 1 / s t a t " , O_RDONLY )
read ( 8 , " 1 ( in i t ) S О О О О - 1 4 1 9 4 5 60 7 3 " . . . , 1 0 2 3 )
close ( 8 )
О
7
О
о
1016
1016
О
8
191
О
Команда s trace не только отображает имя каждого с истем ного вызова, выпол н е н ­
ного процессом, но и раскрывает аргументы и отображает результирующий код, возвра­
щенный ядром .
В этом п р имере команда top начинает свою работу с проверки текущего значен ия
вре м е н и . Затем она откры вает каталог /proc и считывает е го содержимое, тем сам ы м
получая список процессов, выпол н я е м ы х в текущи й момент. Команда top обраща­
ется к статической коп и и каталога, представляющей процесс ini t , а затем откры вает
/proc/ 1 /s tat, чтобы прочесть и нформацию о состоян и и этого процесса.
Вывод результатов с истемного вызова часто позволяет выявлять ошибки, которые не со­
общаются сами м процессом. Например, ошибки разрешения файловой систем ы или кон­
фликты сокетов обычно довольно очевидны в выводе команд s trace или truss. Ищите
системные вызовы, возвращающие показания ошибок, и проверяйте ненулевые значения.
Команда s trace снабжена флагами , которые описан ы н а соответствующей mаn­
странице. Н апример, флаг - f испол ьзуется для разветвленных процессов, и е го полезно
применять дл я отслеживани я демонов (например, httpd) , которые порождают множе­
ство дочерних процессов. Опция е trace=file позволяет отображать только файло­
вые операции , что особен но удобно для определения местоположен и я " неуловимых"
файлов конфигурации .
Н иже п р иведен а налоги ч н ы й п р и м е р и спользован и я команды t ru s s в с истем е
Free B S D . В данном случае м ы хотим увидеть, что делает команда ер п р и коп ировани и
файлов.
-
f r e e b s d $ trus s ер /etc/passwd /Ьпр/рw
l s t a t ( " / e t c /p a s s wd " , { mode = - rw- r - - r - - , i node = l 3 5 7 6 , s i z e = 2 3 8 0 ,
Ы k s i ze=4 0 9 6 ) ) = О ( ОхО )
uma s k ( O x l f f )
1 8 ( 0х 1 2 )
uma s k ( O x 1 2 )
5 1 1 ( Ox l f f )
УПо крайней мере , как правило. Команда s trace может п рерывать систе м н ые вызовы . В этих
случаях отслеживаемый процесс должен быть подготовлен для повторного запуска этих вызовов.
Таково стандартн ое правило выполнения программ в среде U N IX, но оно не всегда соблюдается.
Глава 4. Управление процессами
1 43
f s t a t a t ( AT_FDCWD , " / e t c / p a s s wd " , { mode = - rw- r - - r - - , i node= l 3 5 7 6 ,
s i z e = 2 3 8 0 , Ы ks i z e= 4 0 9 6 ) , Ох О ) = О ( О х О )
s t a t ( " / t mp /p w " , O x 7 f f f f f f fe 4 4 0 ) ERR# 2 ' N o s u c h f i l e or d i r e c t o r y '
3 ( 0х3 )
ope n a t ( AT_FDCW D , " / e t c /p a s swd " , O_RDON L Y , 0 0 )
ope n a t ( AT_FDCWD , " / t mp / pw " , O_WRON L Y I O_C REAT , 0 1 0 0 6 4 4 )
4 ( 0х4 )
mma p ( O x 0 , 2 3 8 0 , P ROT_READ , МAP_S HARE D , 3 , 0 x O ) = 3 4 3 6 6 3 0 4 2 5 6
( Ох 8 0 0 6 4 3 0 0 0 )
w r i t e ( 4 , " # $ F r e e BS D : r e l en g / l l . 0 / e t c /ma s t " . . . , 2 3 8 0 )
2 3 8 0 ( Ох94с)
close ( 4 )
О ( Ох О )
close ( 3 )
О ( Ох О )
=
=
После выдел е н и я памяти и открытия зависимосте й библиотек и ( н е показано) ко­
манда ер использует с исте м н ы й вызов l s tat для пр ове р к и те кущего состояния ф айл а
/etc/pas swd. Затем она применяет команду s tat к пути п ред пола гае м о й к о п и и / tm.p
/pw. Этот файл еще не существует, поэтому команда s tat дает сбой , а ком а нда tru s s
сообщает о б ош ибке " Нет такого файла или каталога " .
Затем команда е р выпол няет с исте м н ый вызов openat ( с параметром O_RDONLY)
дл я чте н и я содержимого файла / e te/pas swd, за к ото р ы м следует ко м а нда open a t ,
прим еняемая к пути / tm.p/pw с параметром о _WRON L У для созда н ия нового файла н а ­
значения. Затем она отображает содержимое файла / e t e/pa s s wd в п а мять (с помощью
команды пunap) и записывает дан ные с помощью команды write. Након е ц , команда ер
выполняет уборку, закрывая оба дескриптора файлов.
Трассировка с исте м н ых вызовов - мощный и нстру м е нт для отладки в руках систе м ­
ных адм и нистраторов. Переходите к этим и нструментам после того , к а к исчерпаете бо­
лее традиционные способы , такие как просмотр фа йл о в журнала и н астрой ка процесса
для подробного вывода. Не пугайтесь плотного вывода; об ыч но достаточно сосредото­
ч иться на читаем ых человеком частях.
4.8. П РОЦЕССЫ, ВЫШЕДШИЕ ИЗ-ПОД КОНТРОЛЯ
Процессы , вышедшие из-под контроля , - это процесс ы , которые поглощают знач и ­
тельно больше ресурсов систе м ы , диска или сети систе м ы , чем требуе т их обычная роль
или ожидаемое поведение. И ногда такие программы и м е ют с во и собстве н н ы е ошибки,
которые привел и к искажению поведения. В других случаях о н и н е с правляются н адл е ­
жащи м образом с восходящ и м и отказам и и застревают в зам кнутых ц и кл а х . Например,
процесс может повторно запускать одну и ту же неудач н у ю операци ю снова и снова, пе­
регружая центральны й процессор. В еще одной категори и случаев ошибки н е существу­
ет, но программное обеспече н ие просто неэффективно в реал и зации и жадно поглощает
ресурсы систе м ы .
Все эти с итуаци и заслуживают внимания с о стороны системного адм и нистратора,
причем не только потому, что процесс, вышедши й из- под контрол я , с корее всего, рабо­
тает некорректно, но также и потому, что он обычно мешает работе других процессов,
которые выполняются в системе.
Гран и ца между патологическим и нормальным поведением пр и большой нагрузке я в ­
ляется неопределенной. Ч асто первый шаг в диагностике заключается в том , чтобы выяс­
н ить, какое из этих явлений вы фактически наблюдаете. Как правило, с исте м н ые процес­
сы должны вести себя разумно, поэтому очевидное неправил ьное поведе н и е со сторон ы
одного и з этих процессов автоматически вызывает подозре н ие Пользовател ьские процес­
сы, такие как веб-серверы и базы данных, могут быть просто перегруже н ы .
.
1 44
Часть 1. Основы администрирования
В ы м ожете определ ить процесс ы , которые испол ьзуют чрезмерное процессор ное
вре м я , п росм атри вая резул ьтаты работы команд p s ил и top . Также проверьте сред­
ние знач е н и я загрузки с исте м ы , о которых сообщает команда uptime. Традиционно
эти знач е н ия определяют среднее кол ичество процессов, которые был и запущен ы за
предыдущие 1 - , 5- и 1 5 - м и нутные и нтервал ы . В систе м е Linux среднее знач е н и е на­
грузки также уч итывает занятость, вызван ную дисковым трафиком и други м и форма­
м и ввода-вы вода.
Для с истем с привязкой к централ ьному процессору средние нагрузки должны быть
меньше общего количества ядер центрального процессора , доступных в вашей с истеме.
Если это не так, с истема перегружена. В системе Linux общее испол ьзование централь­
ного процессора можно выясн ить с помощью команд top или p s , которые позволяют
определить, зависят л и средние значения нагрузки от загрузки процессора ил и систе м ы
ввода-вывода. Если загрузка процессора составляет около 1 00% , это, вероятно, я вляется
узким м естом.
П роцессы , которые избыточно испол ьзуют физическую память систе м ы , могут вы­
звать серьезн ые проблемы с производительностью. Вы можете проверить размер пам я ­
ти , используемой процессам и , выполнив команду top. Столбец V I RT показывает общий
объем виртуал ьной памяти, выделяемый каждым процессом , а столбец RE S показывает
часть этой памяти, отображаемую в настоящее время на определенные страницы памяти
( "резидентн ы й набор" ) .
Оба эти ч исла могут включать общие ресурсы , такие как библ иотеки, и , следовател ь­
но, потен циально вводить в заблуждение. Более прямой показатель потребления памяти ,
испол ьзуемой процессом , указан в столбце DATA, который по умолчани ю не отображает­
ся . Чтобы добавить этот столбец в табл ицу в ывода команды top, нажмите клавишу <t>
сразу после запуска команды top и выберите пун кт DATA из с писка, нажав клавишу про­
бела. Значение DATA указы вает объем памяти в сегментах данн ых и стека каждого про­
цесса, поэтому он относител ьно специфичен для отдельных процессов (без учета разде­
лов общей памяти ) . Следите за ростом этого показателя с течением време н и , а также е го
абс ол ютной велич иной . В с истеме Free B S D существует эквивалентн ый показател ь S I Z E ,
который отображается по умолчанию.
Постарайтесь луч ш е понять, что происходит, прежде чем прекращать процесс , кото­
ры й по все й в идимости вышел из-под контроля . Л уч ш и й путь для решения пробл е м ы
и п редотвращения ее повторен ия - это живой п р и м е р , которы й можно исследовать.
Как только вы уничтожите неудач н ый процесс , бол ьш инство доступных доказательств
исчезнет.
Помн ите о возможности взлома. Вредоносная программа, как правило, не прове­
ряетс я н а п равил ьность в разл и ч н ых средах, поэтому более вероятн о , что в среднем
возн икнет какое-то вырожде н ное состоя н и е . Есл и вы подозре ваете неладное , полу­
ч ите трасс ировку с исте м ного вызова с помощью команд s trace ил и tru s s , чтобы
понять, что делает дан н ый п роцесс ( на п р и м е р , взлам ы вает парол и ) и rде хранятся
е го дан н ы е .
П роцесс ы , вышедшие из- под контроля, моrут запол н ить всю файловую систему, что
вызовет многочислен н ые пробл е м ы . Когда файловая система запол няется , на консол ь
зап исывается бол ьшое количество сообщен и й , и попытки записи в файловую систему
будут вызывать сообщения об ошибках.
Первое , что нужно сделать в этой ситуации, - определить, какая файловая система
заполнена и какой файл ее заполняет. Команда df -h показывает испол ьзование диска
файловой систе м ы в единицах, читаемых человеком. Н аЙдите файловую систему, запол-
Глава 4. Управление процессами
145
ненную н а 1 00% или более. 1 0 Используйте команду du - h в идентифицирован ной файло­
вой системе, чтобы определить, какой из каталогов использует наибольшее пространство.
Повторяйте выполнять команду du до тех пор, пока не будут обнаружен ы большие файл ы.
Команды df и du описывают испол ьзование диска по-разному. Команда df сообщает
о дисковой памяти, используемой смонтированной файловой с истемой, в соответствии
с показателям и , записанн ы м и в метаданных файловой с истемы. Команда du сумм ирует
размеры всех файлов в дан ном каталоге . Если файл отсоединен (удален) от файловой
с исте м ы , но по- прежнему ссылается на какой-то запущенный процесс, команда df со­
общает о зан и маемом пространстве , а команда du
нет. Это несоответствие сохраня­
ется до тех пор , пока дескриптор открытого файла не будет закрыт или файл не будет
усече н . Есл и вы не можете определить, какой процесс испол ьзует файл , попробуйте за­
пустить команды fuser и l s of (они подробно описан ы в разделе 5 . 2 ) , чтобы получить
допол н ител ьную информацию.
-
4.9. ПЕРИОДИЧЕСКИЕ ПРОЦЕССЫ
Ч асто бывает полезно и меть сценарий или команду, выполняемую без вмешательства
человека. К таким ситуациям относятся запланированное со:щание резервных копий, опе­
рации по обслуживанию базы данных или выполнение ночных пакетных заданий. Как это
типично мя U N IX и Linux, существует более чем один способ достижения этой цел и .
Демон cron: команды р асписа ни я
Демон cron является традицион н ы м инструментом для запуска команд в соответ­
ствии с задан ным расписан ием. Он запускается , когда система загружается , и выполня­
ется до тех пор, пока с истема работает. Существует нескол ько реализаци й демона cron,
но, к счастью мя адм и н истраторов, синтаксис и функционал ьность разл ичных версий
почти иде нтичны.
RHEL
По причинам , которые остаются неяс н ы м и , демон cron в с истеме Red Hat
был переименован в crond. Однако это все тот же сам ы й cron, которы й все
мы знаем и любим.
Демон cron считывает файл ы конфигураци и , содержащие списки команд и вре м я ,
в которое они должны быть вызваны. Командные строки вы полня ются оболочкой sh,
поэтому почти все , что вы можете сделать вруч ную из оболоч ки, также можно вы пол ­
н ить с помощью демона cron. П р и желан и и можно настроить cron мя испол ьзован ия
другой оболоч ки.
Файл конфигурации cron называется crontaЬ (сокращен ие слов "cron tаЫе " ) . Файл
crontab для отдельных пол ьзователей хран ится в каталоге /var/ spoo l / cron ( Linux)
ил и /var/ cron/ taЬs ( Free B S D ) . Существует не более одного файла crontaЬ мя каж­
дого пол ьзователя . Файлы crontab представляют собой текстовые файлы с именами
пол ьзователей , которы м он и принадлежат. Демон cron ис пол ьзует эти имена файлов
(и их владел ьца) , чтобы выясн ить, какой идентификатор U I D применять при запуске
команд, содержащихся в каждом файле. Команда crontab передает файл ы crontaЬ
в этот каталог и выгружает их оттуда.
108 бол ьш и нстве реал изац и й около 5% памяти на диске резерви руется " на край н и й случай " , но
процесс , запуше н н ы й с правами root, может запол н ить даже это пространство, и в резул ьтате
система сообшает, что степень запол нения дис ка превышает 1 00%.
Часть 1. Основы администрирования
1 46
Демон cron п ытается м и н и мизировать вре м я , затрачи ваемое на повторн ы й с интак­
с ический анал из файлов конфигурации и создания расписания запуска задач. Команда
crontaЬ помогает поддерживать эффективность демона cron, уведомляя cron при из­
менении файлов crontaЬ. Следовательно, нельзя редактировать файл ы crontaЬ напря ­
мую, потому что этот подход может привести к тому, что демон cron не заметит ваши
изменения. Есл и вы столкнулись с ситуацией, когда демон cron , похоже , не признает
модифицированный файл crontaЬ, с игнал HU P , отправленный в процесс cron , в боль­
ш и нстве систем заставит его перезагрузиться.
Де мон cron обычно работает молча, но большинство версий могут вести файл жур­
нала (обычно /var/log/cron), в котором переч ислен ы команды , которые были выпол­
н е н ы , и моменты вре м е н и , когда они запускались. Взглян ите на файл журнала cron,
есл и у вас возникл и проблемы с работой демона cron и вы н е можете понять, почему.
rn Дополнител ьную информаци ю о журнале s y s l o g см . в главе 1 0 .
Формат файлов cron tаЬ
Все файл ы crontaЬ в системе имеют одинаковый формат. Комм е нтари и вводятся
после знака фунта ( # ) в первом столбце строки. Каждая строка без комментария содер­
жит ш есть полей и представляет одн у команду:
ми ну та ч а с д ень ме ся ц д ень_ нед ели к ома нда
Первые пять поле й сообщают де мону cron, когда нужно выпол н ить команду. Они
разделе н ы пробелами , но внутри поля к ома нды пробелы передаются прямо в оболоч­
ку. Поля в спецификации времени и нтерпретируются, как показано в табл . 4.5. Запись
в файле crontaЬ часто называют заданием планировщика.
Таблица 4. 5 . Специф икации времени в файле crontaЬ
Поле
мину та
ча с
Описание
Диапазон
Ми нута часа
Час дня
от 0 до 59
О до 23
Ме с яц года
День недел и
с 1 по 1 2
О до 6 ( 0 = воскресенье)
День месяца
де нь
ме сяц
де н ь не д ели
с 1 по 3 1
Каждое из связанных с временем полей может содержать следующую информацию.
Звездочка, которая может означать л юбое значение.
•
•
Единствен ное целое ч исло, которое означает точно заданное значение.
•
Два целых числа, разделенных дефисом, соответствующие диапазону значен и й .
•
Диапазон , з а которым следует косая черта и значение ш ага, например 1 - 1 О / 2 .
•
С писок целы х ч исел или диапазонов, разделенных запятым и , соответствующих
л юбому значению.
Например , спецификация времени
45
10
*
*
1-5
означает " 1 0:45 , с понедел ьника по пятницу". Подсказка: н икогда н е испол ьзуйте звез­
дочки во всех полях, если не хотите , чтобы команда запускалась каждую м инуту, что по­
лезно только при тестировании сценариев. Одна м и н ута - м и н и мальный шаг, доступ­
ный для работы демона cron.
Глава 4. Управление процессами
1 47
Диапазоны времени в файле crontaЬ могут включать значение ш ага. Например, ряд
О , 3 , 6 , 9 , 1 2 , 1 5 , 1 8 можно записать более кратко как 0 - 1 8 / 3 . М ожно также испол ьзо­
вать трехбуквенную текстовую м немонику для имен месяцев и дней , но не в сочетании
с диапазона м и . Н ас колько нам известно , эта фун кция работает только с а н глийскими
и менами .
Существует потен циал ьная двус м ыслен ность между пол я м и день_ недели и ден ь
месяца. Каждый ден ь - это и ден ь недели и ден ь месяца. Если указан ы значения как
день_ недели, так и день, то день должен удовлетворять тол ько одному из двух усло­
в и й , которы е необходимо выбрать.
Например, спецификация времени
0 , 3 0 * 13 * 5
означает " каждые полчаса в пятни цу и каждые полчаса 1 3- ro числа" , а не " каждые пол ­
часа в п ятни цу 1 3-ro " .
Команда представляет собой командную строку оболочки sh, которая должна быть
выпол нена. Это может быть л юбая допусти м ая команда оболочки и ее н е н ужно брать
в кавычки. П редполагается, что команда продолжается до конца строки и может содер­
жать пробелы или знаки табуляции.
Знаки процента ( % } указы вают с и м волы новой строк и в поле кома нд а . В фактиче­
скую команду включается только текст, стоящий до первого знака % . Остальны е строки
передаются кома нде в качестве стандартного ввода. Используйте обратную косую черту
( \ } в качестве у правляющего символа в командах с значащим знаком процента, напри­
мер d а t е + \ % s .
Хотя оболочка s h участвует в выпол н е н и и команды, она н е действует как оболоч­
ка регистраци и (login shell ) и н е ч итает содержимое файлов -. / . profile или -. / . bash_
pro f i l e . В резул ьтате пере м е н н ы е о кр уже н ия команды могут б ыть н астроен ы н е ­
сколько иначе , чем ожидаемые. Если команда работает нормально из-под оболочки, но
терпит сбой при включ е н и и в файл crontaЬ, вероятным виновнико м является окруже­
ние. Если это необходимо, всегда можете обернуть свою команду сценарием , устанавли ­
вающим соответствующие переменные окружения.
М ы также рекомендуем испол ьзовать пол н ы й путь к команде, чтобы задан ие выпол ­
нялось должн ы м образом , даже если параметр РАТ Н не установлен так, к а к ожидалось.
Например, следующая команда каждую м инуту записывает дату и время безотказной
работы в файл в домашнем каталоге пользователя :
* * * * * e ch o $ ( / b i n / da t e )
- $ ( / u s r /b i n / u p t ime )
> > - /u p t ime . l o g
Кро м е того , вы м ожете я в н о задать пере м е н н ы е среды в верхней части файл а
crontaЬ:
РАТИ = / b i n : / U S R / b i n
* * * * * echo $ ( da t e )
- $ ( up t ime )
> > - /u p t ime . l o g
Вот еще несколько примеров корректных записей в файле crontaЬ:
* / 1 0 * * * 1 , 3 , 5 e c h o ruo k 1 / us r /b i n / n c l o c a l ho s t 2 1 8 1
ma i l - s " TC P - p o r t 2 1 8 1 s t a t u s " b e n @ admi n . c om
1
Эта строка отправляет результаты проверки подкл ю ч е н и я к п орту 2 1 8 1 кажды е
1 0 м инут по понедел ь н и кам , средам и пятн ицам. Поскольку демон c r o n выпол няет
команду посредством оболочки sh, специальные с и м волы оболочки, такие как каналы
и пере направления, функцион ируют должн ы м образом.
О 4 * * Sun ( / u s r / b i n /mys ql c h e c k - u ma i n t e n a n c e - - op t imi z e - - a l l - d a t a b a s e s )
1 48
Часть 1. Основы администрирования
Эта зап ись запускает программу обслуживания mysqlcheck по воскресенья м в 4:00
утра. Поскольку выход не сохраняется в файле или отбрасы вается иным образо м , он бу­
дет отправлен по электронной почте владел ьцу файла crontaЬ.
2 0 1 * * * f i nd / t rnp -rnt irne +7 - t yp e f - е х е с rrn - f {
1
' ; '
Эта команда выпол няется каждую ночь в 1 : 20. Она удаляет все файл ы в каталоге
/ trnp, которые не был и измене н ы за сем ь дне й . Символ ы ' ; ' в кон це строки означают
конец аргументов подкоманды для поиска.
Демон cron не п ытается ком пенсировать команд ы , которые не был и запуще н ы ,
пока система н е работала. Тем не менее он хорошо разбирается в настройках времен и ,
например при переходе н а летнее и зи мнее время.
Есл и ваше задан ие cron я вляется сценарие м , обязательно сделайте его исполняемым
(с помощью команды chmod +х) , и наче демон cron не сможет е го в ыпол н ить. В каче­
стве ал ьтернативы настройте команду cron для непосредственного вы полнения ваше го
сценария прямо из командной оболочки (например, bash -с /Ьin/myscript . sh) .
...
Управление файлом cron tаЬ
Команда crontaЬ имя_ ф а йла устанавл ивает файл с именем и м я файла в качестве
вашего файла задан и й , заменяя л юбую предыдущую верс и ю . Команда crontab - е
проверяет копи ю вашего файла crontab , приме няет к н е м у с вой редактор (зада н н ы й
перемен ной среды E D I TOR) , а затем повторно передает е го в каталог crontaЬ. Команда
cron tab - 1 в ы водит содержимое вашего файла cron tab на стандартн ы й в ы вод ,
а crontaЬ -r удаляет его, оставляя вас без файла crontaЬ вообще .
Суперпол ьзовател ь может предоставить аргумент и м е н и пол ьзовател я для редак­
тирования или просмотра файлов crontaЬ других пол ьзовател е й . Например, команда
crontab - r j smi th стирает файл crontab, принадл ежащ и й пользовател ю j sm i t h ,
а команда crontab - е j smi th редактирует е го. Система Linux допускает испол ьзова­
н ие как и м е н и пользователя , так и имени файла в одной и той же команде, поэтому и м я
пол ьзователя должно быть указано с префиксом -u дл я устран е н и я н еоднознач н ости
(например, crontaЬ -u j smi th crontaЬ . new) .
Без аргументов командной строки бол ьш инство версий команды crontaЬ пытаются
ч итать файлы crontab со стандартного ввода. Есл и вы ввел и эту команду случай но, не
п ытайтесь выйти с помощью клавиш < Ctrl + D > ; есл и вы сделаете это, то сотрете файл
crontaЬ. В место этого испол ьзуйте клав и ш и < Ctrl+C>. Система Free B S D требует, что­
бы вы предоставил и тире в качестве аргумента и ме н и файла, чтобы заставить команду
crontaЬ обратить внимание на ее стандартн ы й ввод. Остроумно!
М ногие орган изаци и испыты вают малозамет н ы е , но повторяющиеся сетевые сбо и ,
которые возн и кают, потом у что с исте м н ые адм и н и страторы настроил и демон cron
для выполнения одной и той же команды на сотнях маш и н в одно и то же время, вызы­
вая задержки или чрезмерную нагрузку. П роблема синхрон изации часов с сетевым про­
токолом NTP усугубляет проблему. Эту проблему легко исправить с помощью сценария
случай ной задержки.
Демон cron регистрирует свою деятел ьность в журнале syslog, используя фун кцию
cron, причем бол ь ш инство сообще н и й отправляется на уровне info. Конфигурации
журнала syslog, заданные по умолчан ию, обыч но отправл я ют дан н ые журнала cron
в отдельный файл .
Глава 4. Управление процессами
1 49
Другие файлы crontaЬ
Помимо пользовательских файлов c r o n t a b , команда cron также подчиняется с и ­
сте м н ы м записям , занес е н н ы м в файл / etc/ cron tab и в каталог / etc/ cron . d. Эти
файлы и м е ют н е м ного отл ичающийся формат от файлов cron tаЬ для каждого поль­
зователя : они позволяют командам запус каться от и м е н и произвольного пол ьзовате ­
л я . Допол нительное поле имени пол ьзователя находится перед именем команды . Поле
имени пользователя отсутствует в файлах c ro n t a b , поскольку имя файла crontaЬ и так
предоставляет эту информацию.
В общем случае , файл /etc/ crontaЬ - это файл для с исте м ных адми нистраторов ,
который можно сохранить вруч ную, тогда как /etc/ cron . d - это с воего рода храни ­
лище, в которое пакеты программного обеспечения могут устанавливать любые записи
конфигурац и и демона cron, которые и м могут понадобиться. Файлы в каталоге /etc/
cron . d по умолчани ю называются именами пакетов, которые их установили , но в демо­
не cron это соглашение не применяется .
В дистрибутивах Linux также предустановлены записи конфигурации демо­
на cron, которые запускают сценарии в наборе известных каталогов, тем са­
м ы м обеспечивая еще один способ для пакетов программ ного обеспечения
устанавливать периодические задания без какого-либо редактирования фай­
ла crontaЬ. Н апример, сценарии в каталогах /etc/ cron . hourly, /etc/
cron . daily и /etc/cron . weekly запускаются ежечасно, ежедневно и еже­
недельно соответственно.
Контроль доступа к демону cron
Два файла конфигураци и указывают, какие пользователи могут отправлять файлы
crontaЬ: в системе Linux - /etc/cron . { allow , deny } , а в системе Free BSD - /var/cron/
{ allow , deny } . Многие стандарты безопасности требуют, чтобы файлы crontaЬ бьm до­
ступны только для обслуживания учетных записей или для пользователей, имеющих на это
обоснованное право. Файлы allow и deny способствуют соблюден ию этих требован ий.
Если файл cron . allow существует, то он содержит с п исок всех пользователе й , ко­
торые могут отправлять файлы crontab, по одному в строке . Никто другой не м ожет
вызвать команду crontaЬ. Если файл cron . allow не существует, то проверяется файл
cron . deny. Это тоже с п исок пользователе й , но имеющий противоположн ы й смысл : до­
ступ разрешен каждому, за исключением перечисленных пользователе й .
Если н и файл cron . al low, н и файл cron . deny не существуют, т о по умолчани ю
( п р и отсутстви и общепринятого соглаш е н и я это может произойти случайно) система
либо разрешает всем пользователя м вводить файлы crontaЬ , либо предоставляет до­
ступ к файлу crontaЬ только суперпол ьзователю . На практике начал ьн ая конфигура­
ция обычно включается в и нсталляцию операционной системы по умолчанию, поэтому
вопрос о том , как команда crontaЬ может вести себя без файлов конфигураци и , являет­
ся спорн ы м . Большинство конфигураций по умолчан и ю позволяют всем пользователя м
получать доступ к демону cron.
Важно отметить, что в бол ь ш и нстве систем управл е н ие доступом осуществляет­
ся программой crontaЬ, а не cron. Есл и пользователь может зап исать файл crontab
в соответствующий каталог другим и способа м и , то демон cron будет слепо испол н ять
содержащиеся в нем команды . Поэтому оч ень важно назначить владел ьцем пользовате­
ля root для каталогов /var/ spool / cron и /var/ cron/ taЬs. Дистрибутивы операци­
онных систем всегда правил ьно устанавл ивают разре шения по умолчанию.
Часть 1. Основы администрирования
1 50
Системные та ймеры
В соответствии с задачей дублировать функции всех других подсистем Linux коман­
да sys temd в ключает в себя концепцию тай меров, которые активируют дан н ую службу
systemd по п редопределенному расписанию. Таймеры мощнее , чем записи crontaЬ, но
их сложнее настраивать и и м и труднее управлять. Некоторы е дистрибутивы Linux (на­
пример, CoreOS) полностью отказались от демона cron в пользу тай меров systemd, но
наш и иллюстративные с исте м ы продолжают испол ьзовать демон cron и запускать е го
по умолчани ю.
W
Введение в sys temd и units см. в главе 2.
У нас нет полезных советов относительно выбора между таймерами systemd и фай­
лами crontab. Испол ьзуйте то, что вы предпочитаете для л юбой заданной задачи . К
сожалению, у вас на самом деле нет возможности стандартизовать одну или другую си­
стем у, потому что программн ые пакеты добавляют свои задания в произвол ьную систе­
му по своему выбору. Вам всегда нужно проверять обе систе м ы , когда вы п ытаетесь вы­
яснить, как выполняется конкретное задание.
Структура таймеров sys temd
Систе м н ы й таймер состоит из двух файлов:
•
модуль таймера, который описывает рас писание и устройство дл я активации;
•
модуль службы , в котором указаны сведения о том , что н ужно запустить.
В отличие от зап исей crontaЬ, таймеры sys temd могут быть о п исан ы ка к в абсо­
лютных календарн ы х тер м и нах ( " среда в 1 0: 00 утра " ) , так и в терм инах , относящихся
к другим событиям ( "через 30 секунд после загрузки с исте м ы " ) . Параметры объединя­
ются, чтобы позвол ить создавать сложные выраже н ия , которы е не имеют ограничен и й ,
характерных для демона cron. П араметры выражения времени описаны в табл . 4.6.
Табли ца 4 . 6 . Типы таймеров sys temd
Ти п
Вре М11
OnAc t i ve s e c
Относительно време ни , в которое акти вируется сам таймер
OnBoo t S e c
On S t a r t up S e c
OnUni tAct i ve S e c
OnUni t i na c t i ve s e c
OnC a l e n d a r
Относительн о време ни загрузки системы
Отн осительн о време н и , когда система была зап ущена
Отн осительно времен и , в тече н ие которого указан н ое устройство было актив н ым
Относительно време ни , в течен ие которого указанное устройство н еакти вн о
Определе нн ый де н ь и время
Как показывают их имена, значен и я для этих параметров тай м ера указа н ы в се­
кундах. Напр и м е р , O n Ac t i ve S e c = З O означает 30 секунд после включения тай м ера.
Фактически это знач ение может быть любым действител ьн ы м выраже н и е м вре м е н и
systemd, как более подробно описано н иже.
Пример таймера sys temd
Систем ы Red Hat и CentOS вкл ючают предварител ьно сконфи гурированный тай мер
sys temd, которы й удаляет временные файлы систе м ы оди н раз в ден ь. Н иже мы более
подробно рассмотрим пример.
Глава 4. Управление процессами
1 51
В н ачале перечисл и м все определенные командой sys temctl таймеры. (Мы приво­
дим вывод в виде таблицы, чтобы сделать его досту пным дл я чтения. Обычно каждый
таймер создает одну дли нную строку вывода.)
r e dha t $ systemctl list-timers
NEXT
L E FT
LAST
PAS S E D
UN I T
AC T I VAT E S
Sun 2 0 1 7 - 0 6 - 1 8 1 0 : 2 4 : 3 3 UTC
1 8h left
S a t 2 0 1 7 - 0 6 - 1 7 0 0 : 4 5 : 2 9 uтс
1 5 h ago
s y s t emd- t mp f i l e s - c l e a n . t ime r
s y s t emd - tmp f i l e s - c l e a n . s e rv i c e
В выводе перечисляются имя таймера и и м я активируемой службы. Так как это си­
сте м н ы й таймер по умолчани ю , файл модуля находится в стандартном каталоге /usr/
lib/ systemd/ system. Вот что записано в модуле таймера:
r e dha t $ cat /usr/ lib/ sys temd/ system/ sys temd-tmpfiles - clean . timer
[ Un i t ]
D e s c r i p t i on = Da i l y C l e anup o f Temp o r a r y D i r e c t o r i e s
[ T ime r ]
OnBoo t S e c = l Smin
OnUn i tAc t i ve S e c = l d
Таймер сначала активируется через 1 5 м и н . после загрузки , а затем запускается один
раз в день. Обратите внимание на то, что необходим какой-то три ггер дл я начал ьной
активации (здесь
OnBoo t S e c ) . Не существует единой спецификаци и , которая обес пе­
ч и вала бы эффект " каждые Х м инут " самостоятельно.
П рони цательные читатели заметят, что таймер фактически не указывает, какой мо­
дул ь н ужно запустить. По умолчанию таймер sys temd и щет модул ь службы с тем же
имене м , что и тай мер. Целевой модуль можно явно задать с помощью параметра U n i t .
В этом случае соответствующий модуль службы н е и меет никаких сюрпризов.
r e dh a t $ cat /usr/lib/ systemd/ system/ sys temd- tmpfiles -clean . service
-
[ Un i t ]
De s c r i p t i on=C l e anup o f Temp o r a r y D i r e c t o r i e s
D e f a u l t Depende n c i e s=no
Con f l i c t s = s hu t d own . t a r g e t
Af t e r = s y s t emd - r e ad a h e a d - co l l e c t . s e rvi ce s y s t emd - re adahe a d - r ep l a y . s e rv i c e
l o c a l - f s . t a r g e t t i me - s ync . t a r g e t
Be f o r e = s h u tdown . t a rg e t
[ Service ]
T y p e = s imp l e
E x e c S t a r t = / u s r / b i n / s y s t emd- tmp f i l e s - - c l e a n
I OSchedul i n gC l a s s = i d l e
Целевую службу можно запустить напрямую (т. е . независимо о т тай мера) с помо­
щью команды sys temctl s tart sys temd- tmpfi les - clean, как и л юбую другую
службу. Этот факт значительно облегчает отладку заплан ированных задач , которые мо­
гут быть источником значительных адми н истративных сложностей при испол ьзован и и
демона cron.
Для того чтобы создать собстве н н ы й таймер, создайте файлы timer и s ervi ce
в каталоге /etc / systemd/ sys tem. Если хотите , чтобы тай мер запускался при загру:�ке ,
добавьте следующий текст:
.
[ Instal l ]
Want e d B y = mu l t i - u s e r . t a rg e t
.
Часть 1. Основы администрирования
1 52
в конце файла блока таймера. Не забудьте включить таймер во время загрузки с помощью
команды sys temctl enaЬle. ( В ы также можете сразу запустить таймер с помощью ко­
манды sys temctl start. )
Параметр таймера A c c u r a c y S e c задерживает его активацию случ ай н ы м количеством
вре м е н и в пределах указанного временного окна. Эта функция удобна, когда тай мер ра­
ботает на бол ьшой группе сетевых маш и н , и вы хотите , чтобы все тай меры н е срабаты­
вал и в оди н и тот же момент. ( Напом н им , что с помощью демона cron для достижения
этого эффекта необходимо испол ьзовать сценарий случайной задержки . )
По умолчан ию параметр Ac c u r a c y S e c равен 6 0 сек. Если вы хотите, чтобы ваш таймер
выпол нялся в точно запланирован ное время, испол ьзуйте настройку Ac c u r a c y S e c = l n s .
(Точ ность, равная наносекунде , вероятно, будет достаточной. Впрочем , обратите вн имание
на то, что вы на самом деле не получите точность наносекунды . )
Опред еление времени в таймере sys temd
Таймеры позволя ют гибко задавать даты , вре мя и интервал ы . Стран и ца руководства
sys temd . time является авторитетн ы м справочн и ком по грам матике спе цификаций .
Дл я задания относител ьных моментов можно испол ьзовать и нтервальные вы раже ­
ния вместо секунд, таких как те , которые испол ьзуются в качестве значе н и й параметров
OnAc t i ve S e c и OnBoot S e c . Например, можно использовать все указанные н иже формы:
OnB oo t S e c = 2 h l m
OnS t a r tu p S e c = l we e k 2 d a y s З h ou r s
OnAc t i ve S e c= l h r 2 0m3 0 s e c 1 0ms e c
Пробел ы в о вре м е н н ых выражен иях я вля ются необязател ьн ы м и . М и н и мальная точ ­
ность - наносекунд ы , но есл и ваш тай мер срабаты вает сли ш ком часто (более одного
раза каЖдые две секунды), с истема временно откл ючает его.
В дополнение к запуску с периодическим и интервалами таймеры могут быть запланиро­
ван ы для активации в определенное время с помощью параметра OnC a l enda r. Эта функ­
ция предлагает самое близкое соответствие синтаксису традиционного задания cron, но его
си нтакс ис более выразителен и гибкий. В табл . 4.7 при ведены некоторые примеры с пец­
ификаций времени, которые могут использоваться как значение параметра OnCa l enda r.
Во времен н ы х выражениях звездоч ки я вляются запол н ителям и , которые соответству­
ют л юбому допустимому значению. Как и в файлах crontaЬ, косая черта означает при­
ращение знач е н и я . Точ н ы й синтакс ис нем ного отл ичается от испол ьзуемого в файлах
crontaЬ: там увелич иваемый объект должен быть диапазоном ( например, 9 - 1 7 / 2 , " каж­
дые два часа меЖду 9:00 и 1 7:00 " ) , а времен ные выраже н ия таймера sys temd принимают
тол ько начальное значен ие ( например, 9 / 2 , " каждые два часа, начиная с 9:00 утра").
Таблица 4 . 7 . Примеры кодирования времени и даты в таймере systeшd
Спецификация времени
Значе ние
2017-07-04
4 и юля 20 1 7 года в 00:00:00 (полночь)
4 и юля каждый год, но только есл и он попадает в интервал с пятни­
цы по понедельник
Понедельник, вторн ик и среда в полдень
Понедельн ик в 5:00.
По понедельникам в 00:00:00 (полночь)
В первый день месяца в 00:00:00 (полночь)
К аждые 1 О м и нут, нач иная с 0-й минуты
В 1 1 : 1 О и 23: 1 О каждый день
F r i -Mon * - 7 - 4
Mon -W e d
*-*-*
12 : 00 : 00
Mon 1 7 : 0 0 : 0 0
wee k l y
mont h l y
* : 0/10
* -*-* 11/12 : 10 : 0
Глава 4 . Управление процессами
1 53
Временные таймеры
С помощью команды sys temd - run можно запланировать выпол н е н ие команды
в соответствии с любым и з стандартных типов таймера systemd, но не создавая файлы
таймера и службы, предназначенные для кон кретной задачи . Например, можно извле­
кать файлы из репозитория G it каждые десять м инут:
$ sys temd-run - - on-calendar ' * : 0 / 1 0 ' /Ьin/ sh - с " cd /арр & & git pul l "
Running t ime r a s uni t run - 8 8 2 3 . t i me r .
W i l l run s e rv i c e a s uni t run - 8 8 2 3 . s e rv i c e .
Таймер systemd возвращает идентификатор временного модуля, которы й можно вы­
вести с помощью команды sys temctl. ( Еще раз, напомн и м , что мы отредактировали
вывод, приведен н ы й н иже . )
$ sys temctl list- timers run- 8 8 2 3 . timer
NEXT
Sat 2 0 1 7 - 0 6 - 1 7 2 0 : 4 0 : 0 7 UTC
L E FT
9min l e f t
LAST
Sat 2 0 1 7 - 0 6 - 1 7 2 0 : 3 0 : 0 7 UTC
PAS S E D 1 8 s ago
$ sys temctl lis t-units run- 8 8 2 3 . timer
UNIT
run - 8 8 2 3 . t ime r
LOAD
loaded
ACT I VE
a c t ive
SUB
wai t i n g
DESCRI PТ I ON / Ьi n / s h - с " c d / а р р & & g i t p ul l "
Чтобы отменить и удалить временный таймер, просто остановите его, выпол н и в ко­
манду stop sys temct:
$ sudo sys temctl s top run- 8 8 2 3 . timer
Команда sys temd- run создает таймер и модульные файлы в подкаталогах / run/
sys temd/ sys tem. Однако вре м е н н ы е таймеры после перезагрузк и не сохраняются .
Чтобы сделать их постоя н н ы м и , нужно найти их в каталоге / run, настроить их по м ере
необходимости и и нсталлировать в каталоге /etc/systemd/ system. Обязательно оста­
новите временн ы й таймер перед запуском или включением постоян ной версии.
Общее использова ние запла нирова нных задач
В этом разделе м ы рассмотри м несколько общих задач , которые часто автоматизиру­
ются с помощью демона cron или таймера systemd.
Отправка почты
Следующая запись c r o n t a b реализует п ростую эле ктрон ную почту. Вы можете ис­
пользовать такую запись, чтобы автоматически отправлять результаты ежедневного от­
чета или результаты выполнения команды. (Строки были обреза н ы , чтобы поместиться
на странице. Н а самом деле это одна длинн ая строка. )
3 0 4 2 5 * * / u s r / Ьi n /ma i l - s " T ime t o do t h e T P S r e p o r t s "
b e n@ admi n . com% T P S r e po r t s a r e due a t t h e end o f t h e mon t h ! G e t
b u s y ! % % S i nce re l y , % c r on%
Обратите в н и мание н а использован и е с и м вола % как для в ыделения команды из
входного текста, так и для отметки окончани й строки внуrри ввода. Это сообщен и е от­
правляется по электронной почте в 4: 30 утра 25 ч исла каждого месяца.
1 54
Часть 1. основы администрирования
Очистка файловой сист ем ь1
Когда п рогра м м а авар и й но заверш ается , ядро может создать файл дам па памя­
ти (обыч но называе м ы й aore . p i d, core или программа . core) , содержащий сн имок
адресного п ространства программы . Файл ы дампа памяти полезн ы дл я разработчи ков,
но мя систе м н ы х адм и н истраторов они обыч но являются пустой тратой места на диске .
П ол ьзователи часто не знают о файлах дам па, поэтом у о н и не склон н ы отключать
их создан и е ил и удал ять их самостоятел ьно. Вы можете испол ьзовать задание cron
м я очистки этих файлов дам па ил и других остатков, оставшихся после н еправильн ых
или сбойных процессов.
Ротация ф айла журнала
Систем ы разл ичаются по качеству управл е н ия файла м и журнала, и вам , вероятно,
придется настроить параметры п о умолчан и ю , чтобы о н и соответствовали ваш и м ло­
кал ьн ы м правилам . Ротация файла журнала означает разделение его на сегменты по раз­
меру или по дате с сохранением нескольких старых версий журнала. Поскольку ротация
журнала является повторяющимся и регулярно происходящим событием , это идеальная
задача, которую нужно планировать ( подробнее см. раздел 1 0. 5 ) .
Выполнение пакетных заданий
Н е которые м ительные выч исления луч ш е всего запускать в виде пакетн ых заданий.
Например, сообщения могут накапл и ваться в очереди или базе дан н ых. Вы можете ис­
пользовать задан и е cron мя одновре м е н ного извлече н ия , преобразования и загрузки
всех сообщен и й в очереди н другое м есто , например хранил ище данн ых.
Н екоторые базы дан н ы х извле кают выгоду из текуще го обслуживан ия . Например,
распредел е н ная база дан н ы х с открытым исход н ы м кодом Cassandra и м еет функцию
восстановления, которая синхрон изирует узл ы в кластере . Эти задачи обслужива н ия яв­
ляются хоро ш и м и кандидатами мя выпол н е н ия с помощью демона cron или таймера
systemd.
Рез ервно е коп ирован ие и з еркалирование
Вы можете испол ьзовать заплан ирован ную задачу мя автоматического резервного
копирования каталога в удаленную систему. М ы рекомендуем запускать полное резерв­
н ое коп ирование один раз в неделю , накапливая и н крементные разл ичия каждую ночь.
Запус кайте резервное коп ирование поздно ноч ью, когда нагрузка на систему, вероятно,
будет н изкой.
Зеркал а - это побайтовые коп ии файловых систем ил и каталогов , разме ще н н ы х
в другой систе м е . Они могут испол ьзоваться как форма резервного копирования ил и
как с пособ сделать файл ы досту п н ы м и в нескольких местах. Веб-сайты и репозитори и
програм м н ого обеспече н и я часто зеркалируются , чтобы повысить отказоустойчивость
систе м ы и обеспечить более быстрый доступ мя физически удал е н н ых пользователе й .
Испол ьзуйте периодическое выпол н е н ие команды rsync дл я поддержания зеркал в ак­
туал ьном состоян и и .
глава
5
Файловая си с тема
Ответьте , не раздумывая , на вопрос: что из перечисленного н иже м ожно считать эле ментам и файловой систем ы?
•
Процессы
•
Аудиоустройства
•
Структуры данных ядра и параметры настройки
•
Канал ы межзадачного взаимодействия
Если речь идет о системах U N IX или Linux , ответ будет таков: все перечислен ное
выше. Н у и, конечно же , в файловую систему входят собствен но файлы 1 •
Основны м назначением файловой систе м ы я вляется упорядочение хранимых ресур­
сов систем ы . Однако программистам не хотелось кажды й раз заново изобретать колесо
при управлении объектами других типов. Очень часто оказывалос ь удобн ы м представ­
лять такие объекты в виде элементов файловой системы . Подобны й у нифицированный
подход и м еет как преи м ущества ( еди н ы й програ м м н ы й и нтерфе йс , легкий доступ и з
и нтерпретатора команд) , так и недостатки (реализация файловых систем по методу док­
тора Франке н штейна) , но н езависимо от того , н равится он вам или н ет, именно такой
подход применяется в системе UN IX (а значит, и в с истеме Linux).
Файловую систему можно представить состоящей из четырех основных компонентов:
•
пространство имен - методы именования объектов и организации их в виде еди ­
н о й иерархии;
1 Точнее говоря , эти элементы представлен ы внутри файловой систе м ы . В больш и н стве случаев
файловая с истема служит " местом встречи " кли ентов с драй верам и и серверам и , которые и м
требуются .
1 56
Часть 1. Основы администрирования
•
АРР - набор системных вызовов для перемеще н ия между объектами и управле­
ния и м и ;
•
модель безопас ности - схема защиты , сокрытия и совместного использования
объектов;
•
реал изация - программ н ы й код, которы й связывает логические модели с диско­
вой подсистемой .
В современных ядрах с истем определен абстрактный и нтерфейс, позволяющий рабо­
тать с различн ы м и файловыми системами . Одн и части файлового дерева обрабатывают­
ся традиционной дисковой подсистемой , другие управляются специальн ы м и драйверами
ядра. Например, за работу файловых систем - как сетевых ( Network File System - N FS ) ,
так и общих межсетевых (Common I nternet File System - C I FS), - отвечает драйвер, кото­
рый перенаправляет запросы серверу, расположен ному на другом комп ьютере .
К сожалению, кон цептуальные границы нечетко очерчен ы , поэтому и меется сли ш ­
ком м ного "особы х" случаев. К примеру, файлы устройств позволяют программам взаи­
модействовать с драйверами ядра. Они н е являются файлами данных, но обрабатывают­
ся файловой с истемой , а их характеристики записываются на диск.
Еще одни м усложняющим фактором является то, что ядро поддерживает несколь­
ко типов дисковых файловых систе м . Доми ни рующими стандартам и в данн ы й момент
я вл яются систе м ы ext 4 , XFS и U FS , а также ZFS и Btrfs компани и Oracle. Однако су­
ществует и множество других файловых систе м , таких как VxFS компан и и Ve ritas и JFS
компани и I В М .
Есть м ного реал изац и й файловых с исте м с другой семанти кой , таких как FAT
и NTFS (испол ьзуются в системе M icrosoft Windows) и 9660 (применяется на ком пакт­
дисках).
Организация файловой с исте м ы - оче н ь обширная те ма, которую м ы рассмотрим
с н ескольких точек зре н и я . В этой главе рассказывается, где обычно хранятся файл ы ,
и описываются характеристики файлов, а также рассм атриваются биты разреш е н ия
и ключевые команды, позволяющие задавать атрибуты файлов. Технические подробно­
сти , связанные с файловыми с истемам и , например разбиение дисков, рассматриваются
в главе 20.
Файловая система N FS , обеспечивающая совместное испол ьзован и е и удал е н н ы й
доступ к файлам в системах U N IX и Linux описывается в главе 2 1 . В главе 22 рассматри­
вается аналогичная с истема, применяемая в с истеме Windows.
Ш Дополнител ьную и нформацию о конкретных файловых систе мах см . в разделе 20 . 9 .
При таком разнообрази и реал изаций файловых с истем может показаться странн ы м ,
что данная глава посвящена всего л и ш ь одной файловой системе. Однако н а отдельных
реал и зациях можно специально не останавЛ и ваться , поскол ьку в большинстве совре­
м е н н ых файловых систем л ибо предпри н яты попытки обеспечить более эффекти вное
и надежное применение традиц ионн ы х функциональных возможностей , л ибо допол ­
н ительные функциональные возможности реал изованы в качестве отдельного уровн я ,
работающего поверх семантики стандартной файловой систе м ы (некоторые файловые
систе м ы реализуют оба направления). Как бы то ни было, сли ш ком м ного програм м н ых
пакетов ориентировано на описанную в этой главе модель, чтобы ею можно п ренебречь.
2 Интерфейс прикладных п рограм м (Application Programming l nte rface
-
API)
-
общ и й тер м и н
для о п и с а н и я набора п одп рогр а мм , орган изован н ых в в иде б и бл и отеки и л и совокупности
библиотек и доступ ных п рограммистам.
Глава 5. Файловая система
1 57
5.1 . ИМЕНА ПУТЕЙ
Файловая с истема - это единая иерархическая структура, которая начинается с ка­
талога / и разветвляется , охватывая произвольное ч исло подкаталогов. Каталог само­
го верхнего уровня называется корневым . Эта моноиерархическая с истема отличается
от используемой в системе Windows, где применяется понятие пространства имен , осно­
ванное на принципе деления диска на разделы .
В графических пользовательских и нтерфейсах каталоги часто называются папками,
даже в системах Linux. Папки и каталоги - одно и то же. Папка - это терм и н систем
Windows и macOS. Тем не менее стоит отм етить, что слово " папка" часто вызывает раз­
дражен ие у некоторых экспертов. Не используйте его в технических контекстах, если не
готовы ловить на себе иронические взгл яды.
Цепочка имен каталогов, через которые необходимо пройти дл я доступа к задан но­
му файлу, вместе с именем этого файла образуют путь к файлу. Путь может быть аб­
сол ютн ым (например, / t.mp/foo) или относительн ы м (например, book4 /filesystem) .
Последние и нтерпретируются начиная с текущего каталога. Возможно, м ногие считают,
что текущи й каталог задается интерпретатором команд. На самом деле текущи й каталог
есть у каждого процесса.
Термины имя файла и путь в той или иной степени являются взаимозаменяе м ы м и
( п о крайней мере так они трактуются в дан ной книге ) . Соответствен н о , имена файлов
и пути бывают абсол ютными и относител ьными.
Файловое дерево может иметь произвольную глубину, однако каждый компонент
имени файла должен состоять не более чем из 255 с и м волов. Существует также огра­
ничение на длину пути, который вы можете передавать ядру в качестве аргумента си­
стемного вызова (4095 байт в Linux и 1 024 байт в BSD). Для того чтобы получить доступ
к файлу, пол ное имя которого превышает эти ограничения, необходимо с помощью ко­
манды cd перейти в промежуточн ы й каталог, а затем воспользоваться относитель н ы м
путем к файлу.
5.2. МОНТИРОВАНИЕ И ДЕМОНТИРОВАНИЕ
ФАЙЛОВОЙ СИСТЕМЫ
Файловое дерево формируется и з отдельных часте й , называемых файловыми система­
ми, каждая из которых содержит корневой каталог и список его подкаталогов и файлов.
Как правило, знач е н ие термина становится ясным из контекста, но для ясности мы бу­
дем испол ьзовать тер м и н "файловое дерево" для обозначения все й схе м ы , а файловой
системой будем называть ветви , присоединенные к этому дереву.
Некоторые файловые систе м ы представляют собой разделы диска или логические
тома с памятью на дисках, но, как уже было с казано, файловая система может при н и ­
мать обл и к всего , что подчиняется определенному и нтерфейсу прикладного програм ­
мирова н и я : сетевых файловых с исте м , компонентов ядра, эмуляторов резидентных
дисков и т.д. В большинстве ядер есть даже оригинальная файловая система, позволяю­
щая монтировать отдельные файлы , как если бы они были физическими устройствами ,
и создавать образы файловых с истем без н еобходимости в перераспределении дисковой
памяти . Систем ы Linux даже отдельные ч асти файлового дерева и нтерпретируют как
файловые систе м ы . Этот прием позволяет дублировать, перемещать и скрывать фраг­
менты файлового дерева.
часть 1. основы администрирования
1 58
В бол ь ш инстве случае в файловые систе м ы присоеди няются к файловому дереву
с помощью команды mount3• Эта команда связывает каталог существующего файлового
дерева, называе м ы й точкой монтирования, с корневым каталогом новой файловой си­
стемы. Н а врем я монтирования доступ к прежнему содержимому точки монтирован и я
становится невозможны м . Впроч е м , в большинстве случаев точка монтирования - это
пустой каталог.
Например, команда
$ sudo mount /dev/ sd2i4 /users
подключает к точке монтирования, заданной в виде пути /users , файловую систему, рас­
положен ную в дисковом разделе (устройстве) /dev/sda.4. Просмотреть содержимое фай­
ловой систе м ы по окончании монтирования можно с помощью команды ls /users.
В н екоторых с истемах программ а mount
это просто оболочка, вызывающая ко­
манды, специфичные для файловой с исте м ы , такие как mount . ntfs или mount smЬfs.
При необходимости эти вспомогательные команды можно выпол нять напрямую; ино­
гда они предлагают допол н ительные параметр ы , которые оболочка mount н е пони мает.
С другой стороны, универсальной команды mount вполне достаточно для повседневного
использования.
Чтобы увидеть все файловые системы , смонтированные к данному моменту, команду
mount можно выполнить без каких-либо аргуме нтов . В системах Linux может быть 30
или более файловых с исте м , большинство из которых представля ют собой различные
интерфейсы ядра.
Файловые системы, которые обычно монтируются в системе, перечислены в файле
/etc / f s taЬ . И нформация в этом файле позволяет автоматически проверять (с помо­
щью команды fsck) и монтировать (с помощью команды mount) файловые системы во
врем я загрузки с указанными параметрами . Файл f s taЬ также служит докуме нтацией
для компоновки файловых систем н а диске и включает короткие команды, такие как
mount /usr. И нформацию о команде f s taЬ см. в разделе 20. 1 0 .
Файловые систе м ы демонтируются командой umount. " Занятую" файловую систему
демонтировать невозможно. В ней ке должно быть н и открытых файлов, к и выпол н я ­
ющихся процессов с их текущими каталогами . Если демонтируемая файловая с истема
содержит исполняемые программ ы , они ке должны быть запущен ы .
-
_
В систе м е Linux предус мотрена возможность "ленивого " демонтирования
(с помощью команды umount -1), которая удаляет файловую систему из
иерархии имен, ко в действительности не демонтирует ее до тех пор, пока
все существующие файловые ссьm к и ке будут закрыты. П олезность этой
опции достаточно спорна. Во-первых, нет н икакой гарантии, что существу­
ющие ссылки когда-либо будут закрыты сами по себе, кроме того, " напо­
ловину демонтированное " состояние файловой с исте м ы может нарушать
семантическую целостность для испол ьзующих ее програм м . Они могут вы­
пол нять операции чтения и записи с существующими дескрипторами фай­
лов, ко ке могут открывать новые файлы или выполнять какие-либо другие
операции файловой системы.
Команда umount - f предназначена для принудительного демоктирования занятой
файловой с истем ы и поддерживается во всех рассмотренных нами с истемах. Однако ке
1Мы говори м " в больш и нстве случаев " , поскольку в файловой систем е Z FS п р инят несколько
другой п одход к м о н т и р ова н и ю и демонтирова н и ю , н е говоря уже о других а с п е ктах
адми н и стрирования файловых систем . Подробнее см. раздел 20. 1 2.
Глава 5. Файловая система
1 59
стоит применять ее в системах, не использующих N FS . Кроме того , она м ожет не при­
меняться к определенным типам файловых систем ( на пр и мер , к таким, как систе м ы XFS
или e x t 4 , которые ведут системные журнал ы).
Если файловая система, которую вы п ытаетесь де м о н т и р оват ь , занята, в место ис­
пол ьзования команды wnount -f выпол н ите команду fuser, чтобы узнать, какие про­
цессы работают с файловой системой . Команда fuser - с то чка монтир о в а ния выво­
_
дит идентификаторы всех процессов, обращающихся к файлам или каталогам указа нн о й
файловой с исте м ы , а также ряд буквенных кодов, которые отображают природу этой
активности. Например,
f r e e b s d $ fuser - с /usr/home
/ u s r / home : 1 5 8 9 7 с 8 7 7 8 7 с 6 7 1 2 4 х
1 1 2 0 1х
1 1 1 9 9х
11 198х
972х
Буквен н ые коды зависят от конкретной системы. В дан ном прим ере используется сис­
тема FreeB S D. В этой системе буква с означает, что п ро це сс имеет свой рабочий каталог
в файловой системе, а буква х означает выполняемую программу. Однако детали обычно
не имеют большого значения ; главное для нас - иден ти фикаторы п роцессов ( P I D ) .
Для того чтобы в точности определить, что собой предс тавл яют эти процессы , вы ­
полните команду ps , передав ей список идентификаторов, о которых сообщ ила команда
fuser.
nu t r i en t : - $ ps up 11 8 7 7 8 7 1 1 2 0 1 "
U S E R P I D % C P U %МЕМ S TARTE D
T I ME
fnd 1 1 2 0 1
О.О
0.2
1 4 Ju l l 6 2 : 3 2 . 4 9
fnd 8 7 7 8 7
о.о
о . о Thu0 7 PM 0 : 0 0 . 9 3
СОММАND
ruby : s l ave_aud i ochanne l b a c kend
-bash ( b a s h )
Список идентификаторов взят в кавычки, чтобы интерпретатор передал его команде
ps как один аргумент.
В системах Linux можно избежать необходи мости задания идентификаторов
( P I D) в команде p s , выпол н и в команду fuser с флаго м v Этот вариант
команды генерирует более ч итабельный резул ьтат, которы й включает и м я
команды.
-
$ fuser - cv /usr
USER PID
/usr root 4 4 4
root 4 9 9
root
520
ACCE S S
СОММАND
. . "m
. . . .m
. . . .m
atd
s shd
lpd
.
Букве н н ые коды в столбце ACCE S S такие же, как u резул ьтате выполнения ко ма нд ы
fuser -с.
Более удач ной ал ьтернативой команде f u s e r я в л я е тс я утил ита l s o f . Утил ита
lsof - более сложная программа, чем fuser, и, соот ветствен но результаты ее работы
более содержател ьны . Она по умолчанию инсталл и руе тс я во всех на ши х иллюстратив­
ных системах Linux, а в системе Free B S D доступна в виде пакета.
,
В систе ме Linux сценар и и , предназнач е н н ые для поиска кон кретной и н
формации об использова н и и файловых с истем про ц е с с а м и , располагают
возможностью н епосредственного чтен и я ф а йл о в, хран я щихся в каталоге
/proc. Однако команда l sof -F, форматирующая вы вод команды l sof
для облегчения синтаксического анал иза,
более простое и переносимое
решение. Для запроса тол ько той информации , которая действител ьно не­
обходима, следует испол ьзовать дополн ител ьные флаги командной строки.
­
-
Часть 1. Основы администрирования
1 60
5.3. СТ РУКТ УРА ФАЙЛОВОГО ДЕ Р ЕВА
Файловые систе м ы в с истеме U N IX н и когда не были хорошо орган изова н ы . В ней
одновременно используется м ного разн ых, несовместимых соглашен и й об именовани и
файлов. В о м ногих случаях файлы группируются по вы пол н яе м ы м фун кциям , незави­
симо от того, как часто они изменяются . Эrо затрудняет обновление операцион ной с и ­
сте м ы . Например, каталог / e t c содержит ряд файлов, которые н икогда н е меняются ,
а также локал ьные файлы . Как определить, какие файл ы нел ьзя трогать при обновле­
н и и системы'? Эrо нужно просто знать ... или верить, что программа инсталляции примет
правильные решения.
Систем н ые адми нистраторы , стремящиеся к логической стройности , и ногда подда­
ются соблазну улучш ить структуру файлового дерева, принятую по умолчан и ю . К со­
жалению, файловое дерево имеет м ного с крытых зависимосте й , поэтому попытки изме­
н ить его структуру созда.т новые проблемы. Просто п редоставьте операцион ной с истеме
самой решать, где разместить с исте м н ые пакеты. Если же вам предлагают измен ить ме­
стоположен и е пакетов, всегда соглашайтесь на вариант, принятый по умолчан и ю , и наче
у вас возникнут неприятности .
m
Дополн ительную информацию о настрой ке конфигураци и ядер с м . в главе 1 1 .
Корневая файловая система содержит корневой каталог и м и н имальный набор фай­
лов и подкаталогов. Файл ядра н аходится в недрах корн евой файловой с исте м ы , но
не имеет стандартного и мен и или точ ного местоположе ния; в с истеме BSD это даже не
один файл , а , с корее , набор компонентов.
Ч астью корневой файловой с исте м ы я вляются также каталог / etc для критических
систе м н ых файлов и файлов конфигураци и , каталоги / sЬin и /Ьin
для важн ых ути ­
л ит и и ногда каталог / tJnp для временных файлов. В прошлом каталог /dev представ­
лял собой реальный каталог, в кл юче н н ы й в корневую файловую с истему, но в сейчас он
является виртуальной файловой с истемой, которая монтируется отдел ьно. ( П одробнее
см. в разделе 1 1 . 3 . )
Одн и систе м ы хранят совместно используемые библиотечные файл ы и проч ие важ­
ные программ ы ( например, препроцессор языка С) в каталоге / l ib ил и / l ib б 4 . Другие
переместили эти элементы в каталог /usr/ l ib, оставив для каталога / l ib рол ь с и м во­
лической ссылки.
О громное значение имеют также каталоги /usr и /var. В первом хран ится бол ьш и н ­
ство стандартных программ и другие полезные компоненты , в частности и нтерактивная
документация и библ иотеки. Совсем не обязательно, чтобы каталог /usr бьm отдельной
файловой системой, однако дл я удобства адми нистрирования е го , как правило, монти­
руют именно так . Для того чтобы с истема могла загружаться в многопол ьзовател ьском
режим е , необходим ы оба каталога
/usr и /var.
В прошлом бьmо принято разбивать с исте м н ы й диск на разделы и размещать в н и х
отдел ьн ые части файлового дерева ( в основном в каталогах / u s r , /var и / tmp ) . Эта
практика не исчезла пол н остью и в настоящее время , но основной тенден цией стало
испол ьзование одной бол ьшой корн е вой файловой систе м ы . Большие жесткие диски
и возрастающая сложн ость реал изаций файловых с истем с н изил и цен ность разбиения
дисков н а разделы .
-
-
-
m
П обудительные п р и ч и н ы для разби е н и я диско в и его основные правила с м . в раз­
деле 20.б.
Глава 5. Файловая система
1 61
Ч аще всего разбиение диска используют для того, чтобы одна часть файлового дерева
не занимала все доступное пространство и не вызывала сбой с исте м ы . Соответственно,
чаще всего разбиению подвергаются каталог /var (содержащий файлы журнала, разме­
ры которых со временем растут и могут вызвать проблем ы ) , / tmp и рабочие каталоги
пользователей. Специальные файловые системы могут хранить большие объем ы инфор­
мации , например библ иотеки исходных кодов и базы данн ых.
Наиболее важные стандартные каталоги перечислен ы в табл . 5. 1 .
Таблица 5 . 1 . Стандартные каталоги и их содержимое
Каталог
Содержимое
/Ьin
К оманды операци онной системы ядра
Ядро и файлы для его загрузки
/boo t
/compat
/dev
/etc
/home
/ l ib
/media
/mnt
/opt
/proc
Файлы и каталоги в системе FreeBSD, обеспечивающи е б инарную
совместимость с с и стемой Linux
Файлы устройств: д и сков, пр и нтеров, псевдотерминалов и т.д.
Важные файлы запуска и конфигурации системы
Стандартные домашн ие каталоги пользователей
Б иблиотеки , совместно используемые библ иотеки и команды , применяемые
в каталогах /Ьin и / sЬin
Точк и монтирования файловых систем на съемных нос ителях
Временные точки монтирования
Программные пакеты необязательных приложений (которые пока не находят
ш и рокого применения)
Информация о всех выполняющихся процессах
/root
Домаш ний каталог суперпользователя (часто просто / }
/ run
/ sЬin
Точк и встречи для выполняемых программ ( иденти ф икаторы P I D, сокеты и т.д. ) .
К оманды, необходи мые для обеспечен ия минимальной работоспособности
системы•
/ s rv
Поля, зарезервированные для распределения через веб и другие серверы
/ sys
/ tmp
/usr
/usr/Ьin
/usr/ include
/usr / l ib
Интерфейсы разных ядер (Liпux)
Временные файлы, которые могут удаляться пр и перезагрузке
Иерархия дополнительных файлов и программ
Большинство команд и и сполняемых файлов
Ф айлы заголовков, предназначенные для комп и ляции С -программ
Б иблиотеки и вспомогательные файлы для стандартных п рограмм
/usr/ local
Локальные программы ( программы, создаваемые или устанавл и ваемые
локальным пользователем); отражает структуру каталога /usr
/usr/ sЬin
М енее важные команды с истемного администрирования
Элементы, общие для различных систем
/usr/ share
/usr/ share/man
/us r / s rc
/usr/ tmp
Страницы интеракти вной документации
Исходные коды нелокальных программных пакетов ( не наход ит ш и рокого
применения )
Дополнительный каталог для временных файлов, которые могут сохраняться
п ри перезагрузке
Часть 1. Основы администрирования
1 62
Окончание табл. 5. 1
Катаnог
/var
Содержимое
Системные данные и конфигурационные файлы
/var/ adm
Разное: журнальные файлы, записи об инсталляции системы,
административные компоненты
/var/ log
Системные журнальные файлы
/var/ run
Те же функции. что и в каталоге /run, а также символические ссылки
/var/ spool
Буферные каталоги для принтеров, электронной почты и т.д.
/var / t.mp
Каталог для временного х ранения файлов ( после перезагрузки файлы не
исчезают)
•в прошлом отличительная особенность команд в каталоге / sЬin обычно состояла в том, что они связаны со ста­
П1ческими версиями системных библиотек и, следовательно, не имеют многоч исленных зависимостей от других
частей системы. В настоящее время все бинарные модули связан ы динамически и поэтому между каталогами
/Ьin и / sЬin реальной разн ицы нет.
Во м ногих с исте мах та п-страни ца hier содержит общие рекомендаци и по фор м и ­
рова н и ю файловой систе м ы . Однако не стоит ожидать, что реальная систе ма в о всех
отношениях согласует свои действия с " генеральн ы м планом " .
Стандарт Filesystem Hierarchy Standard п ытается кодифицировать, рациона­
л изировать и объясн ить стандартные каталоги для систе м семейства Linux.4
Это отл ич н ый ресурс для консул ьтаций , есл и вы столкнул ись с необыч ной
ситуацие й и должны выясн ить, куда сохран ить какой - н ибудь объект.
Н есмотря на свой статус " стандарта" , это скорее отражен ие реальной практики , чем
ре гламентирующий документ. К тому же в п оследнее врем я он не часто обновляется .
поэтому не описывает точное расположен ие файловой систе м ы , обнаруженное в совре ­
менных дистрибути вах
S .4. Типы Фдйлов
В больши нстве реал изаций файловых систем определены семь ти пов файлов. Даже
есл и разработчики добавл я ют в файловую с истему что-н ибудь новое и необычное (на­
пример, и н формаци ю о процессах в каталог /pro c ) , и м приходится мас кировать это
под файлы стандартн ых типов.
•
обы ч н ые файлы ;
•
каталоги;
•
файл ы символьных устройств;
•
файл ы блочных устройств;
•
локал ьные сокеты ;
•
именован н ые канал ы ( FI FO) ;
•
символические ссылки.
Определ ить тип существующего файла можно с помощью команды file. Эта коман ­
да не только определяет стандартн ые ти пы файлов, но и рас познает их форматы .
$ file /usr/ include
/ u s r / i n c l ude : d i r e c t o r y
' Cм . w i k i . l inux founda t i on . o rg / e n / FH S .
Глава 5 . Файловая система
1 63
$ file /Ьin / sh
/ b i n / s h : E L F 6 4 -b i t L S B e x e c u t aЫ e , х 8 6 - 6 4 , ve r s i on 1 ( Fr e e B S D ) ,
dynami c a l l y l i n k e d , i n t e r p r e t e r / l i b e x e c / l d - e l f . s o . 1 , f o r F r e e B S D 1 1 . 0
( 1 1 0 0 1 2 2 ) , F r e e B S D- s t yl e , s t r i p p e d
М ногословная информация о файле /Ьin/ sh означает всего л и ш ь " это исполняемая
команда. "
Другая возможность исследования файлов предоставляется командой l s - ld. Флаг
-1 подразумевает вывод подробной и н формаци и , а флаг -d заставляет команду ls вы­
водить и нформацию о каталоге , а не е го содержимое.
Первый с и м вол в строке вывода обозначает тип объекта. В следующем примере вы­
дается информация о каталоге /usr/ include.
$ ls - ld /usr/ include
drwx r - x r - x
2 7 root
root
4 0 9 6 J u l 1 5 2 0 : 5 7 / u s r / i nc lude
Возможные коды для представления различных типов файлов перечислен ы в табл. 5.2.
Таблица 5 . 2 . Кодирование типов файлов в листинге команды l s
Тип файла
Символ
Обычный файл
Создается командой
Удаляется командой
Редакторы, ер и др.
rm
Каталог
d
mkdir
rmdi r ,
Файл символьного устройства
с
mknod
rm
Файл блочного устройства
ь
mknod
rm
Локальный сокет
s
socket ( 2 )
rm
Именованный канал
р
mknod
rm
Символическая сс ылка
l
ln - s
rm
rm
-r
Как видно из табл . 5 . 2 , команда rm является ун иверсальным средством удаления фай­
лов. Но как удалить файл , имя которого, с кажем , -f? В большинстве файловых с истем
это абсолютно корректное и м я , но команда rm -f не сделает то, что нужно, поскольку
выражение -f будет воспринято как флаг команды. В ы йти из положе ния можно, л ибо
указав более полное имя (например, . / - f ) , либо воспользовавшись специал ьн ы м аргу­
ментом - - , которы й сообщит команде rm о том , что остальная часть командной строки
представляет собой имя файла, а не с писок аргументов: rm -- -f.
Похожая проблема возникает с файлам и , в именах которых присутствуют управля­
ющие с и м вол ы , поскол ьку такие имена трудно ил и вообще невозможно воспроизвести
с помощью клавиатуры. В подобной с итуации нужно воспользоваться м етаси м волами
и нтерпретатора команд, чтобы задавать не имя цели ком, а лишь его шаблон . Указывайте
также опцию - i , чтобы команда rm требовала подтвердить удаление каждого файла. Это
позволит не удалить нужн ые файл ы , соответствующие шаблону. Вот как, к примеру,
можно удал ить файл с оригинальным именем foo<Ctrl+ D >bar.
$ ls
f o o ? b a r f o o s e kde - ro o t
$ rm - i foo*
rm : r e move ' f o o \ 0 0 4 b a r ' ? у
rm : remove ' fo o s e ' ? n
часть 1. Основы администрирования
1 64
Команда l s отображает вместо управля ющего символа знак вопроса, что и ногда сби­
вает с толку. Если забыть, что сим вол " ? " тоже я вляется подстановочным знаком и нтер­
претатора, и поп ытаться выполн ить команду rm foo?bar, можно удалить более одного
файла (правда, не в дан ном примере) . Цен ность флага -i очень вели ка !
Ком анда l s Ь вы водит управл я ющие с и м вол ы в виде вос ьмерич н ых ч исел . Это
с войство м ожет оказаться полезн ы м , если н еобходи мо специально иде нтифициро­
вать эти с и м вол ы . Например, < Ct rl+A>
это 1 (\00 1 в восьмерич ной с истем е счис­
ления ) , < Ctrl + B > - это 2 и т.д. в алфавитном порядке. Страни ца man aseii и раздел
Википедии о системе ASC I I содержат прекрасную таблицу управляющих символов и их
восьмеричных эквивале нтов.
Если имена файл о в совсем уж сложно набирать, прибегните к команде rm -i *. Еще
одна возможность удаления файлов с причудливыми именами - использование другого
и нтерфейса файловой систе м ы , такого как режим представления каталогов интерпрета­
тора emaes или визуального средства, подобного Nautilus.
-
-
О бычные фа йл ы
Обычн ы й файл - это просто последовательность байтов. Файловые с истем ы не на­
лагают ограничения на его структуру. Текстовые документы , файлы данных, программ ­
н ые файл ы , библиотеки функций и м ногое другое - все это хранится в обычных фай ­
лах. К их содержимому возможен как последовательны й , так и прямой доступ.
Каталоги
Каталог хран ит и м е нован н ы е ссылки на другие файл ы . О н создается командой
mkdi r и удаляется (при условии, что он пуст) командой rmdir. Непустые каталоги мож­
но удалить командой rm -r.
Специальные ссыл ки . " и . . " обозначают сам каталог и его родительский каталог
соответствен но. Такие ссыл ки нельзя удалить. Поскольку корневой каталог находится
на вершине иерархии , ссыл ка "/ " в нем эквивалентна ссылке " / . (и обе эти ссылки
эквивалентны " / " ) .
"
"
.
.
"
Жестка я ссыл ка
Имя файла в действительности хранится в родительском каталоге, а не в самом файле.
На файл можно ссылаться из нескольких каталогов одновременно и даже из нескольких
элементов одного и того же каталога, причем у всех ссьuюк могут быть разные имена. Это
создает иллюзию того, что файл одновременно присутствует в разных каталогах.
Эти дополн ительные "жесткие " (фиксированные) ссьmки (которы е следует отличать
от символических, или " мягких" ) можно считать синонимами для исходных файлов, и с
точки зрения файловой систем ы все ссъm ки на файл эквивалентн ы . Файловая система
подсчиты вает количество ссьmок на каждый файл и при удалении файла н е освобождает
блоки дан н ых до тех пор, пока не будет удалена последняя ссылка на него. Ссьmки н е
могут указывать на файл, находящийся в другой файловой с истеме.
Жесткие ссылки создаются командой ln и удаля ются командой rm . Синтаксис ко­
манды ln легко запомнить, поскольку она является "зеркал ьным отражен ием " команды
ер . Команда ер oldfile newfile создает коп и ю файла oldfile с именем newfile,
а команда ln oldfile newfile преобразует имя newfi le в допол нительную ссылку
на файл oldfile.
Глава 5. Файловая система
1 65
В большинстве файловых систем жесткие ссылки можно создавать не тол ько на фай­
л ы , но и н а каталоги , но это делается довольно редко. Например, ссыл ки на каталоги
часто приводят к вырожденным условия м , таким как зацикливание и неоднозначность.
В большинстве случаев лучше испол ьзовать символ ические ссылки (см . н иже ) .
Для того чтобы узнать, с колько ссылок существует на дан н ы й файл , используйте ко­
манду ls - 1 . (См. н иже пример использования команды l s . ) Допол н ительные подроб­
ности можно найти в разделе 5 . 3 . Кроме того, рекомендуем обратить внимание на ком ­
м ентари и по поводу команды l s - i в разделе 5 . 3 , которые помогут идентифицировать
жесткие ссыл ки.
Важно понимать, что жесткие ссылки не я вляются особым типом файлов, просто
файловая система позволяет создавать несколько ссьmок на оди н файл . Не только со­
держимое, но и атрибуты файла, в частности права доступа и идентификатор владельца,
я вляются общими для всех ссылок.
Ф айл ы символ ьн ых и блоч н ых устройств
Ш Устройства и драйверы более подробно рассматриваются в главе 1 1 .
Файл ы устройств позволяют програм мам получать доступ к аппаратным средствам
и периферийному оборудованию систе м ы . Ядро включает (или загружает) специал ьные
программы (драйверы ) , которые во всех деталях "знают " , как взаимодействовать с каж­
дым из имеющихся устройств, поэтому само ядро может оставаться относительно аб­
страктным и н езависимым от оборудования.
Драйверы устройств образуют стандартны й коммун и кационн ы й интерфейс, кото­
р ы й воспринимается п ол ьзователе м как совокупность обычных файлов . П олуч и в за­
прос к файлу символьного ил и блоч ного устройства, файловая система передает этот
запрос соответствующему драйверу. Важно отличать файлы устройств от драйверов этих
устройств. Файлы сами по себе не я вля ются драйвера м и . Их можно рассматривать как
шлюзы, через которые драйвер принимает запрос ы .
Разница между символьными и блоч н ы м и устройствами сли ш ком тонкая и н е сто­
ит внимания. В прошлом н екоторые типы аппаратных средств могл и быть представле­
н ы файлами л юбого типа, но в современных с истемах такая конфигурация встречается
редко. На практике , в с истеме FreeB S D блочных устройств вообще нет, хотя упомина­
ния о н их на справочн ых страницах и в заголовочн ых файлах еще встречаются.
Файлы устройств характеризуются двумя номерами : старш и м и младши м . Старш и й
н о м е р устройства позволяет ядру определить, к какому драйверу относится файл ,
а младший номер , как правило, иде нтифицирует кон кретное физическое устройство.
Например, старший номер устройства 4 в системе Linux соответствует драйверу после­
довательного порта. Таким образом, первый последовательн ы й порт (/dev/ ttyO) будет
иметь старший номер 4 и младший номер О.
Драйверы могут интерпретировать переданные и м младшие номера устройств как
угодно. Например, драйверы накопителей на магнитных лентах с помощью этого номе­
ра определяют, необходимо л и перемотать ленту после закрытия файла устройства.
В далеком прошлом / dev играл роль общего каталога, а файлы устройств , которые
в нем хранил ись, создавались с помощью команды mknod и удалялись командой rm.
К сожалению, эта " сырая " система плохо справлялась с безбрежны м море м драйверов
и типов устройств, которые появились в последние десятилетия . Кроме того, она спо­
собствовала возн икновению разного рода потенциальных конфигурацион н ых нестыко­
вок: например, файл ы устройств ссылал ис ь на несуществующие устройства, устройства
оказывались недоступн ы м и , поскольку они не имели файлов устройств, и т.д.
Часть 1. Основы администрирования
1 66
В наши дни в бол ь ш инстве с истем реал изована некоторая форма автоматического
управления файлами устройств, которая позволяет системе и грать более активную роль
в настрой ке конфигурации собствен н ых файлов устройств. Подробнее о методах реше­
ния этой задач и в разных с истемах написано в главе 1 1 .
Л окальн ые сокеты
Установленные посредством сокетов соединения позволяют процессам взаимоде й­
ствовать, не подвергаяс ь влиянию других процессов. В с истеме U N IX поддерживается не­
скол ько видов сокетов, использование которых, как правило, предполагает наличие сети.
W Дополнительную информацию о системе Syslog см. в главе 1 0.
Локал ьн ы е сокеты доступн ы тол ько на локальном ком пьютере, и обраще ние к н и м
осуществляется через специальные объекты файловой систе м ы , а не через сетевые пор­
ты . И ногда такие сокеты назы вают U N IХ-сокета м и . В качестве примеров стандартных
средств, испол ьзующих локал ьные сокеты, можно назвать с истемы Х Window и Syslog.
Локал ьные сокеты создаются с помощью с истем ного вызова socket. Когда с обеих
сторон соединение закрыто, сокет можно удалить командой rm или с помощью систе м ­
ного вызова unlink.
И менов а нные ка нал ы
П одобно локал ьн ы м сокета м , и м е нован н ы е каналы обеспеч и вают взаимоде йствие
двух процессов, выполняемых на одном комп ьютере. Такие каналы еще называют фай­
лами F I FO ( Fi rst I n , First Out - " первым поступил , первым обслуже н " ) . Они создаются
командой mknod и удаляются командой rm
.
Символ и ческ ие ссылки
Символ ическая , ил и " м я гкая " , ссылка позволяет вместо име ни файла указывать его
псевдони м . Столкнувшись при поиске файла с символической ссыл кой, ядро извлекает
хранящееся в ней и м я . Разница между жесткими и с и м волическ и м и ссыл ками состоит
в том , что жесткая ссыл ка я вляется прямой, т.е . указы вает непосредственно на и ндекс­
н ы й дескри птор файла, тогда как с и м волическая ссыл ка указывает на файл по и м е н и .
Файл , адресуе м ы й с и м волической ссыл кой , и сама ссылка п редставляют собой разн ые
объекты файловой систе м ы .
Символ ические ссылки создаются командой ln - s и удаля ются командой rm О н и
могут содержать произвольное и м я , т. е. разреш ается указы вать на файлы , хранящиеся
в других файловых системах, и даже на несуществующие файл ы . Иногда несколько с и м ­
вол ических ссылок образуют петл ю.
Символ ическая ссылка м ожет хранить как полное, так и сокращенное имя файла.
Например, команда
.
$ sudo ln - s archived/ secure /var/data/ secure
посредством относ ител ьного пути связывает и м я /var/data/ secure с именем /var/
data/archived/ secure . Как видно из следующего результата в ы пол н е н ия команды
l s , она создает символическую ссьтку /var/data / secure с целью archived/ secure.
$ l s -1 /var/ data/secure
l rwx rwxrwx 1 r o o t r o o t 1 8 2 0 0 9 - 0 7 - 0 5 1 2 : 5 4 /va r / d a t a / s e cu r e -> a rchive d / s e c u r e
Глава 5. Файловая система
1 67
Каталог /var/data можно переместить куда угодно, но символическая ссыл ка оста­
нется корректной.
Разре ш е н и я файла, которые ком анда l s показывает для с и мвол и ческой ссыл к и ,
l rw x r wx rwx , я вляются фиктивн ы м и значе н и я м и . Разреш е н ие на создани е , удал е н и е
ил и п оследующую ссылку контрол ируется содержащ и м каталогом , тогда к а к права
на чте н ие, запись и выполнение в целевой ссылке предоставля ются собстве н н ы м и раз­
решениями. По этой причине символические ссьmки не содержат н и какой и нформации
о разре ше н и и .
Часто ошибочно думают, будто первый аргумент команды ln - s должен преобразо­
вываться с учетом текущего каталога. Н а самом деле он н е раскрывается командой ln
как имя файла, а просто записывается в в иде л итеральной строки , которая становится
объектом символ ической ссылки.
5.5. АТРИБУТЫ ФАЙЛОВ
В традицион ной модели файловой систе м ы U N I X и Linux каждому файлу соответ­
ствует набор из девяти битов режима. Они определяют, какие пользователи имеют право
читать файл , записывать в него данные или запус кать е го на выполнение. Вместе с дру­
гими тремя битами , которые в основном вли я ют на работу испол н я е м ых файлов , этот
набор образует код, ил и режим , доступа к файлу.
Две надцать битов режима хранятся в месте с четырьмя дополн ител ьными бита м и ,
определяющими тип файла. Эти четыре бита устанавли ваются при создании файла и не
подлежат изменению. Биты режима могут изменяться владельцем файла или суперполь­
зователем с помощью команды chmod ( "change mode" - измен ить режим ) . П росмотр
значе ни й этих битов осуществляется с помощью команды ls -1 ( ил и ls -ld в случае
каталога). Пример приведен далее в этой главе.
Биты режима
Де вять битов режима определяют, кто и какие операц и и может выпол нять н ад фай­
лом. Традицион ная систе ма U N IX не позволяет устанавл ивать режи м на уровне от­
дельного пол ьзователя (хотя теперь с п иски управл ения доступом поддерживаются во
всех основных системах). Подробнее это описано в разделе 5 . 6 . Вместо этого три раз­
л и ч н ых набора битов определя ют права доступа, предоставляемые владельцу файл а ,
членам групп ы , которой принадлежит файл , и прочи м пол ьзователя м ( и м е н но в таком
порядке) 5 • Каждый набор состоит из трех битов: бита чте н и я , зап и с и и выпол н е н ия ( в
том ж е порядке) .
Код доступа удобно записывать в виде восьмеричного ч исла, так как каждая цифра
в нем представляется тремя битам и . Тр и старш их бита (в коде доступа им соответствуют
восьмеричные знач ен ия 400, 200 и 1 00) служат для управления доступом к файлу его
владел ьца. Вторые три бита (40 , 20 и 1 0) задают доступ для членов групп ы . Послед н и е
три бита (4, 2 и 1 ) определяют доступ к файлу остальных пол ьзователей . Старш ий бит
каждой триады - это бит чтения, средний - бит зап ис и , младший - бит выполнения.
Если пользователь попадает только в одну из двух-трех категорий прав доступа, ему
предоставля ются только сам ые ограни че н н ые права. Н апример , права владельца файла
5 Если сч итать владел ьца " пол ьзователе м " , а все остал ьные "други м и " , то можно за пом н ит ь
порядок н аборов разрешений, используя и мя Hugo . Буквы u, q и о также я вля ются букве н н ы м и
кода м и , испол ьзуе м ы м и мнемонической версией команды chmod.
Часть 1. Основы администрирования
1 68
всегда определяются триадой битов владел ьца и н и когда - битами групп ы . Возможна
ситуация , когда другие пользователи имеют больше прав, чем владелец, но такая конфи ­
гурация испол ьзуется редко.
Для обы ч ного файла бит чте н ия означает возможность откры вать и ч итать файл .
Бит записи позволяет изменять содержимое файла, в том ч исле пол ностью стирать его.
П равом удаления и переименован ия файла упрамяют биты , заданные для его родител ь­
ского каталога , поскол ьку именно там хран ится имя файла.
Установкой бита выполнения задается разреш е н ие запускать файл . Существует два
типа испол н я е м ых файлов: бинар н ы е файл ы , которые выполняются непосредстве н н о
це нтраль н ым процессором , и сценари и , обрабатываемые и нтерпретатором команд ил и
какой-нибудь другой аналогич н ой программой. В соответствии с принятыми соглаше­
ниям и , сценарии нач инаются со строки примерно такого вида.
# ! / u s r /Ь i n / p e r l
Здесь задается соответствующий интерпретатор. Текстовые испол няемые файл ы , в кото­
рых не указан кон кретный интерпретатор, сч итаются сценариями bash или sh6 •
Бит выпол н е н и я для каталога ( в этом конте ксте е го ч асто н азы вают битом поиска
или сканирования) разрешает переходить в каталог или проходить через него при досту­
пе к файлу, но без получ е н и я с писка содержимого каталога. П олуч е н ие списка стано­
вится возможн ы м , есл и для каталога задана комбинация битов чте н ия и выпол н е н и я .
Комби нация битов зап иси и выпол н е н ия позволяет создавать, удалять и переименовы­
вать файлы в дан ном каталоге .
Традицион ную девятибитовую модел ь режимов с пособ н ы усложн ить и переопре­
дел ить такие рас ш ирен и я , как с п иски управления доступом (см. раздел 5 . 6) , система
S E Linux (раздел 3 . 4) , т. е. Linux с улучшенной безопасностью (см . раздел 22.9), и " бонус­
ные" биты режимов, определяемые отдел ьн ы м и файловыми системами (см. последний
подраздел данного раздела) . Есл и окажется, что вы не можете объясн ить поведение сво­
ей файловой систе м ы , проверьте , оказывает ли на нее мияние оди н из перечисленных
выше факторов.
Биты setuid и setqid
Биты , кото р ы м в коде доступа соответствуют вос ь м ери ч н ы е з н ач е н ия 4 О О О
и 2000,
это биты смен ы идентифи катора пользователя ( s e t u i d ) и идентификатора
групп ы ( s e t g i d) . Если эти б иты установл е н ы для испол няемых файлов, они позволяют
программам получать доступ к файлам и процессам , которые при п рочих обстоятел ь­
ствах недоступны пользователю , выпол н я ющему эти программ ы . П одробнее этот меха­
н изм был описан в начале главы 3.
Есл и бит s e t g i d установлен для каталога, то создаваемые в нем файл ы будут при­
н и мать идентификатор группы каталога, а не групп ы , в которую входит владелец фай­
ла. Это упрощает пол ьзователя м , принадлежащим к одной группе, совместны й доступ
к каталогам . Следует также учитывать, что для исполняемого файла бит s e t g i d имеет
другое значение, но н еоднозначность практически н икогда не возн икает.
-
6 Есл и содержимое файла начинается с си мволов lt ! он обрабатывается ядром напрямую. Однако
если и нтер п ретатор команд не указан или указан неправильно, ядро откажется выполнять файл.
В этом случае текущий и нтерпретатор п редпримет вторую поп ытку выполн ить сценарий , вызвав
команду /Ьin/ sh, которая обычно связана с оболочкой Al111qu i s t или bash (см. раздел 7 . 3 ) . С вен
Машек (Sven Mascheck) ведет очень подробную стран и цу, посвя щенную истори и , реализации и
кроссплатформным вопросам, связанным с испол ьзованием символов 1 ! (так называемые sheЬang).
,
Глава 5. Файловая система
1 69
Допол нительный бит
Бит, котором у в коде доступа соответствует восьмеричное значен ие 1 0 0 0 , н азывается
дополнительным (sticky Ьit) . В первых U N IХ-системах допол н ител ьн ы й бит запрещал вы­
грузку программ из памяти . Сегодн я он утратил свое значение и попросту игнорируется.
Есл и допол нительны й бит установлен дл я каталога , то файловая систем а позволит
удалять и пере именовывать е го файлы только владельцу каталога, владельцу файла ил и
суперпользователю. И меть одно л и ш ь право записи в каталог недостаточно. Такая мера
позволяет несколько луч ш е защитить каталоги вроде /t.zпp.
Кома нда l s : п росмотр атрибутов файла
Файловая система хран ит для каждого файла около сорока и нформационных полей;
бол ьшая часть из них используется самой файловой с истемой . Администратора, в основ­
ном , интересует количество жестких ссьuюк, владелец, группа, код доступа, время послед­
него обращения и последне й модификации, размер и тип файла. Всю эту и нформацию
можно получить с помощью команды ls - 1 (ил и команды l s -ld в случае каталога; без
флага -d команда ls перечисляет содержимое каталога).
Дл я каждо го файла хран ится также вре м я п ослед н е го и з м е н е н и я атр ибуто в .
Традицион ное название этого поля ( "ctime" о т "change t i m e " - врем я изменения) м но­
гих вводит в заблуЖДе н и е , так как они полагают, что это время создания файла. На са­
мом деле здесь зафиксировано время последнего изменения одного из атрибутов файла
( владелец, код доступа и так далее) , но не е го содержи мого.
Рассмотри м пример.
$ l s - 1 /usr/bin/gzip
- rwx r - x r - x 4
root wh e e l 3 7 4 3 2 Nov 1 1 2 0 1 6 / u s r /b i n / g z i p
В первом поле задается т и п файла и режи м доступа к нему. П оскольку первый с и м ­
вол - дефис , значит, перед нам и обычн ы й файл ( с м . табл. 5 . 2 ) .
Следующие девять с и м волов - это три набора битов режима. Порядок н аборов та­
ков: владелец, группа, другие пользователи . В л истин ге команды ls биты режим а п ред­
ставля ются буквами r , w и х (чте н и е , зап ись и выпол н е н и е ) . В показан ном примере
владелец и меет все права доступа к файлу, а остал ьные пользовател и - только право
на чтение и выполнение.
Есл и б ы б ыл установле н бит s e t u i d , то вместо буквы х , обозначающе й п раво
владел ьца н а выпол н е н и е , стояла бы буква s . В случае бита s e t g i d вместо буквы х
для групп ы тоже была бы указана буква s . Последний бит режима ( п раво выпол нения
для других пользователей) представляется буквой t, когда дл я файла задан sticky-бит.
Если бит s e t u i d/s e t g i d или sticky-бит установлен , а надлежащий бит выпол н е н ия нет, эти биты представляются символами s и т , что указывает на игнорирование данных
атрибутов вследствие ошибки.
Второе поле л истин га представляет собой счетчи к ссылок на файл . В данном случае
здесь стоит цифра 4, свидетел ьствующая о том , что /usr/Ьin/gzip - одно из четырех
и м е н файла (три других варианта этого файла - qunzip, g z cat и z cat - н аходятся
в каталоге /usr/Ьin ) . Кажды й раз при создании жесткой ссылки на файл этот счетчик
увел и ч ивается на един ицу. Символические ссыл ки в счетчи ке не уч итываются.
Л юбой каталог и меет м и н и мум две жесткие ссылки: из родител ьского каталога и из
специал ьного файла " . " внутри самого каталога.
часть 1. Основы администрирования
1 70
Следующие два поля оп ределя ют аладел ьца и группу файла. В дан ном примере файл
принадлежит пол ьзовател ю root и одноименной группе. В действительности ядро хра­
н ит эти дан н ые не в строковом виде , а в виде идентифи каторов. Есл и символьные вер­
сии идентифи каторов оп редел ить невозможно, в этих полях будут отображаться ч исла.
Так п роисходит, когда зап ись пол ьзователя ил и груп п ы была удалена из файла, соот­
ветственно, /etc/paв вwd или /etc/group. Не исключено также, что возн икла ош ибка
в базе данных LDAP (описана в главе 1 7) , есл и она испол ьзуется.
В следующем поле отображается разм ер файла в байтах. Рассматр и вае м ы й файл
и меет размер 3 7432 байт. Далее указана дата последней модифи кац и и файла: 1 1 ноя ­
бря 20 1 6 г. В последнем поле л исти н га приведено имя файла: /usr/Ьin/gzip.
Для файла устройства команда l s вьшает несколько и ную и нформацию.
$ ls - 1 /dev/ ttyO
c rw - - w - - - - . 1 r o o t t t y 4 ,
О Aug 3 1 5 : 1 2 / dev / t t y O
Большинство полей осталось те м и же , но вместо размера в байтах показаны старший
и младши й номера устройства. И мя / dev/ ttyO относится в дан ной с истеме ( Red H at )
к п е р во й виртуальной консол и , упрааляемой драйвером устройства 4 (драйвер тер м ина­
ла). Точка в кон це назва н и я режи ма означает отсутствие с п иска управления доступом
(ACL, см. раздел 5 . 6 ) .
При поиске жест к и х ссылок может при годиться команда ls - i , отображающая
для каждого файла номер его и нде ксного дескриптора. Н е вдаваясь в детали реал изаци и
файловой систе м ы , скаже м , что этот номер предстааляет собой и ндекс табл и ц ы , в ко­
торой перечислены все файлы с исте м ы . И м е н но на и ндексные дескрипторы ссылают­
ся файловые зап иси каталогов. Жесткие ссыл к и , указывающие на оди н и тот же файл ,
будут и меть оди наковый номер. Для того чтобы составить представление о " паут и н е "
ссылок, вос пол ьзуйтесь командой l s - l i для определения ч исла ссылок и номера и н ­
дексного дескриптора какого- н и будь файла, а затем найдите его "двойн и ков" с помо­
щью команды find7•
Другим и важ н ы м и опциями команды l s я аляются - а , отображающая все зап иси
в каталоге (даже те файл ы , имена которых н ач инаются с точки), -t, выполняющая сор­
тировку файлов по времени измен е н ия ( ил и -tr, осущесталяющая сортировку в обрат­
ном хронологическом порядке), -F, отображающая имена файлов с вьшелением каталогов
и исполняемых файлов, -R, выводящая рекурсивный список, и -h, которая отображает
размеры файлов в удобной для человеческого восприятия форме (например, 8К или S ЗМ) .
В большинстве верс и й l в теперь по умолча н и ю используются файлы цветового ко­
дирования , если ваш а программа терм инала поддержи вает эту возможность (в бол ьш и н ­
стве случаев эта возможность существует) . Команда l s указывает цвета в соответствии
с ограниче н ной и абстрактной палитрой ( " красн ы й " , "с и н и й " и т. д. ) , и кон ечная про­
грамма должна отображать эти запросы в определенные цвета. Вам может потребоваться
настроить оба варианта lв ( пере м е н н ые окружения LS COLORS ил и L S _ COLOR S ) . Кроме
того, вы можете п росто удалить конфигурацию по умолчан и ю дл я раскраски (обычно
/etc/profi le . d/colorl в * ) , чтобы полностью исключить цвета.
Кома нда chmod: изменение прав доступа
Код доступа к файлу можно изменить с помощью команды chmod. Такое право есть
л и ш ь у аладельца файла и суперпол ьзователя . В первых U N I Х-с истемах код доступа
7 Поп робуйте применить кома нду find
д е скриптор -print .
т о ч ка_монтир о в а ния
- xdev
- inum инд е к с ный
Глава 5. Файловая система
1 71
задавался в виде восьмеричного ч исла. В современных версиях поддерживается также
с истема м н емон ических обозначени й . Первый способ удобнее для систем ного адми н и ­
стратора , но п р и этом можно задать только абсолютное значение кода доступа. В случае
испол ьзован ия м немонического си нтаксиса разрешается сбрасы вать и устанам и вать
отдел ьные биты режи ма.
Первым аргуме нтом команды chmod является спецификация прав доступа. Второй
и последующий аргументы - это и мена файлов, права доступа к которым подлежат из­
м е н е н и ю . При испол ьзовании восьмеричной формы записи первая цифра относ ится
к мадел ьцу, вторая - к группе, а третья - к другим пользователя м . Есл и н еобходимо
задать биты s e t u i d или s e t g i d или допол нител ьн ы й бит, следует указывать н е три ,
а ч етыре восьмеричн ые цифры: первая цифра в этом случае будет соответствовать трем
специал ьн ы м битам.
В табл . 5.3 показано восем ь возможных комбинаций для каждого трехбитовоrо набора,
где символы r, w и х обозначают право чтения, записи и выполнения соответственно.
Таблица 5 . 3 . Коды доступа в команде chmod
Восьмеричное
число
Двоичное
число
Режим
доступа
1
001
010
011
- -
о
2
3
ООО
х
Восьмеричное
число
4
5
-w-
6
-wx
7
Двоичное
число
Режим
доступа
100
101
110
111
r-r-x
rw rwx
Например, команда chmod 7 1 1 myprog предостамяет мадельцу все права, а остал ь­
н ы м пользователя м - только право выпол н е н ия 8•
При испол ьзовании мнемонического синтаксиса вы объединяете множество исполни­
теле й (u - пользовател ь, q - группа или о - другой) с оператором (+ - добавить, - удалить и - присвоить) и набором прав доступа. Более подробное описание мнемони­
ческого с интаксиса можно найти на тап-страни це команды chmod, но синтаксис всегда
луч ш е изучать на примерах. В табл . 5.4 приведено несколько примеров мнемонических
спецификаций.
=
Таблица 5.4. Примеры мнемонических спецификаций команды chmod
Спецификация
Назначение
u+w
Владельцу файла дополнительно дается право записи
uq=rw , o=r
Владельцу и членам группы дается право чтения/записи, остальным пользователям право чтения
а- х
uq=srx , o=
q=u
У всех пользователей отбирается право выполнения
Владельцу и членам группы дается право чтения/выполнения, устанавливаются также
биты SU I D и SGID; остальным пользователям запрещается доступ к файлу
Член ам группы предоставляются такие же права, что и владельцу
' Если файл myprog я вл яется сценарием и нтер претатора команд, должно быть задан о также
право чте н и я для остал ьных пол ьз овател е й . Файлы сценариев, з апускаем ы е и нтерпретатором ,
открываются и ч итаются в текстовом виде , а бинарные файлы выпол н яются непосредственно
ядром , поэтому для них не нужно задавать право чтения.
Часть 1. Основы администрирования
1 72
Символ u ( " user") обозначает владел ьца файла, g ( "group " ) - rруппу, о ( " others ") всех пользователей.
друrих пользователе й , а ( "all " )
-
В системах Linux у существующего файла можно " заимствовать" права до­
ступа. Напри мер, при выпол н е н и и команды chmod - - reference=filea
fi leЬ код доступа для файла fileb будет установлен таким же , как у фай ­
ла filea.
При нал ич и и опции -R команда chmod будет рекурсивно обновлять права доступа
ко всем файлам указа н ного каталога и е го подкаталогов. Здесь удобнее всего придер­
живаться м н е монического синтаксиса, чтобы менял ись только те биты , которые заданы
явно. Например, команда
$ chmod -R g+w mydir
добавляет групповое п раво записи к каталогу mydir и его содержимому, не затраги вая
остал ьные права.
П р и установке битов выпол н е н и я будьте осторож н ы с выпол н е н ие м команды
chmod - R. Ведь п р и м е нительно к каталогу и файлу б ит выпол н е н и я интерпретиру­
ется по-разному. Следовател ьно, вряд ли реал ьн ый резул ьтат выпол не н и я команды
chmod -R а-х будет соответствовать ожидаемому вами . Для выбора и с кл ючител ьно
обычн ы х файлов применяйте команду find.
$ find mydir - type f -ехес chmod а-х ( }
';'
Команды chown и chqrp: смена владел ьца и груп п ы
Команды chown и chgrp предназначе н ы для изменения владельца файла и группы со­
ответствен но. Синтаксис этих команд подобен синтаксису команды chmod, за искл юче­
нием того, что первый аргумент содержит нового владельца или группу соответствен но.
Для того чтобы из мен ить группу файла, н еобходимо л ибо быть владельцем фа й ­
ла и входить в назначаемую rруппу, л ибо быть суперпользовател е м . П равила измене­
н ия владельца в целом услож н ились и зависят от кон кретной с исте м ы . В бол ьши н стве
систем предусмотрен ы средства н астройки поведе н ия команды chown в зависимости
от вы полняемого процесса.
Как и команда chmod, команды chown и chgrp имеют флаг -R, который задает смену
владельца или группы н е тол ько самого каталога, но и всех его подкаталогов и файлов.
Например, последовательность команд
$ sudo chown -R matt �matt/res tore
$ sudo chgrp -R s taff �matt/ re s tore
можно примен ить дл я определ е н ия прав доступа к файлам для пользователя ma t t , ко­
торые бьmи восстановлены из резервной копи и . Если вы устанавливаете домаш н ий (ис­
ходный) каталог пользователя , н е следует п ытаться выпол н ять команду chown для фай ­
л о в , и м е на которых н ач и наются с точки.
$ sudo chown -R matt �matt/ . *
Дело в том , что указа н ному шаблону соответствует также файл matt/ , поэтому бу­
дет изменен владелец родител ьского каталога и, возможно, домаш н их каталогов других
пользователей.
Команда chown может изменить владельца файла и группу одноврем е н но с помощью
такого синтаксиса.
...
chown пользова тель : rруппа файл . . .
.
.
Глава 5. Файловая система
1 73
Например:
$ sudo chown -R mat t : s taff �matt/res tore
На самом деле можно не указывать пользователя или группу, ч то делает команду
chqrp излишней. Если включить двоеточие, но не назвать кон кретную группу, то версия
команды chown в системе Linux использует группу по умолчанию для пользователя.
Н екоторые с истем ы принимают обозначение поль з о в а т е л ь . группа как эквива­
лентное обозначению польз о в а тель : группа . Это всего лишь историческое наследие.
Кома нда шnask: задание станда ртных п рав доступа
Встроенная команда umask позволяет м е н ять стандартн ый режим доступ а к созда­
вае м ы м файлам. Каждый процесс имеет собствен н ы й атрибут umask; встроен ная в ин­
терпретатор команда umask устанавливает собственное значение umask, которое затем
наследуется выполняемыми вами командами.
Значение umask задается в виде трехзначного восьмеричного числа, которое соответ­
ствует аннулируемым правам доступа. При создании файла код доступа к нему устанав­
ливается равны м разнице между величиной , которую запрашивает создающая файл про­
грамма, и значением umask. Возможные комбинации битов режима дл я команды uma s k
перечислены в табл . 5 . 5 .
Таблица 5 . 5 . Схема кодирования значения umask
Восьмеричное
число
Двоичное
число
1
001
010
011
о
2
з
ООО
Режим
доступа
Восьмеричное
число
Двоичное
число
Режим
доступ а
rwx
4
5
100
101
110
111
-wx
rwr -x
6
r- -
7
-w- -х
- --
Например, команда umask 0 2 7 предоставляет в с е права владельцу файла, запрещает
читать файл членам групп ы и не дает н и каких прав другим пользователя м . Стандартное
значение umask равно, как правило, 0 2 2 , т.е . право модификации файла предоставляет­
ся только его владельцу.
Ш Дополнительную информацию о стандартных конфигурационных сценариях см. в главе 8 .
В стандартной модели управления доступом невозможно заставить пользователей уста­
новить определенное значение umask, потому что они всегда могут установить его ина­
че. Однако вы можете поместить подходящие значения по умолчанию в образцы файлов
запуска, которые вы даете новым пользователям . Если вам требуется больше контроля
над разрешениями на создаваемые пользователем файл ы , вам необходимо будет перейти
в обязательную систему контроля доступа, такую как SELinux; см. раздел 3.4.
Допол н ител ьн ые фла ги в системе Li nux
В файловых с исте мах Linux определен ряд вспомогательных флагов, устанавл и вая
которые м ожно запрашивать особые режим ы обработки файлов. Например, оди н флаг
делает файл доступным только для дополнения , а другой - недоступны м для изменения
и удаления.
Флаги имеют двоичные значения, символизируя нал ичие или отсутствие заданного
файла. Базовая файловая система должна поддерживать соответствующую возможность,
Часть 1. Основы администрирования
1 74
поэтому не все флаги могут испол ьзоваться во всех файловых системах. Кроме того, не­
которые флаги я вл я ются экспериментал ьн ы м и , нереализованн ы м и ил и предназначен­
н ы м и только для чтения.
В систе м е Linux для их просмотра и изм е н е н ия атрибутов файлов предназначе н ы
специальные команды l sattr и chattr. В табл . 5 . 6 перечислены н е которые важные
флаги.
Таблица 5.6. Дополнительные флаги файловых систем Linux
Флаг
FSa
Назначение
А
ХВЕ
Никогда не обновлять время доступа ( s t _а t ime ; в целя х повышения производительности )
а
ХВЕ
Разрешить запись в файл только в режиме добавленияб
с
в
в
Запрещение копирования при записи
с
Сжатие содержимого
D
ВЕ
Включить режим синх ронной записи изменений каталога
d
ХВЕ
Не создавать резервные копии ( команда duшp будет игнорировать такой файл)
i
ХВЕ
Сделать файл неизменяемым и неудаляемымб
Е
Ведение журнала для регистрации изменения данных и метаданных
j
s
х
ХВЕ
Включить режим синхронной записи изменений (без буферизации)
в
Отмена сжатия данных , если этот режим включен
по умолчанию
·х = XFS, в = Btrfs, Е = ехtЗ и ext4.
" Может быть устано
влен только суперпользо вателем.
Как и следовало ожидать от такого случайного н абора функций, значение этих фла­
гов для админ истраторов меняется . Главное , чтобы помнить, что есл и какой-то конкрет­
н ы й файл ведет себя странно, проверьте его с помощью команды l sattr, чтобы узнать,
включен ли оди н или несколько флагов.
Отказ от учета времени последнего доступа (флаг А) может повысить производитель­
ность в н е которых с итуациях. Однако его значение зависит от реал изац и и и доступа
к файловой системе; вам п ридется провести самостоятел ьное тестирование п роизводи­
тел ьности . Кроме того, современные ядра теперь по умолчанию устанавл ивают файло­
вые с исте м ы с параметром re l a t ime , что сводит к м и н имуму обновления в переменной
s t _а t ime и делает флаг А в значительной степени устаревшим.
Флаги , запрещающие изменение и разрешающие тол ько добавление ( i и а), бьши
в значительной степени задуманы как с пособы сделать систему более устойчивой к ха­
керским подделкам или враждебному коду. К сожалению, они могут запутать программ­
ное обеспечен ие и защищать только от хакеров, которые плохо знают, как использовать
команду chattr -ia. Реальны й опыт показал , что эти флаги чаще испол ьзуются хаке­
рами , чем для защиты от н их.
W Дополнительную информацию об управлении конфигурацией см. в главе 23.
Мы в идел и н е с кол ько случае в , когда с исте м н ые адм и н истраторы ис пол ьзовал и
флаг i (запрет изменений) для предотвращен ия изменен и й , которые в противном слу­
чае бьши бы внесены систе мой управления конфигурацией, такой как AnsiЫe или Salt.
Излишне говорить, что это создает путаницу, когда детали забыты , и н и кто не может по­
нять, почему управление конфигурацией не работает. Н и когда не делайте этого - про-
Глава 5. Файловая система
175
сто подумайте о стыде , которы й испытает ваша мать, когда узнает, что в ы н атворил и .
Устраните проблему в системе управления конфи гур а ц ией - слушайтесь с вою маму.
Флаг, отменяющий резервное копирован ие (d) , пот е н ц иал ь н о м ожет представлять
интерес для с исте м н ых адм инистраторов , но поскол ьку он является рекомендаци е й ,
убедитесь, что ваша резервная система его поддерживает.
Флаги , которые влияют на ведение журнала и поддерж ку с и н хрон ности (D , j и S ) ,
существуют в основном для поддержки баз дан н ых. О н и н е я вл я ются общедосту п н ы м и
для системных администраторов. Все эти параметры могут значительно с н и зить произ­
водительность файловой с исте м ы . Кроме того, извес тно что вмешател ьство в синхро­
н изацию записи затрудняет работу программ ы fsck в файловых систем ах ext "' .
,
5 .6. Списки УПРАВЛЕНИЯ доступом
Традиционная девятибитовая система контроля доступа " владел ец/групп а/другие "
позволяет решать бол ьш инство задач адм и н истрировани я . Хотя у н е е есть я в н ы е огра
ничения , она хорошо согласуется с традициями ( кое- кто м ож ет с казать "с устаревш и м и
традициям и " ) простоты и предсказуемости UN IX.
Списки управления доступом или ACL (access control lists) - бол е е мощны й и в то
же время более сложн ый метод управлен ия доступом к файлам . Каждому фа йл у или ка­
талогу может соответствовать список AC L, в котором перечисл е н ы правила установки
прав доступа к дан ному файлу ил и каталогу. Каждое правило в с п и с ке ACL называется
записью управления доступом (access control entry - АС Е) .
Запись управления доступом идентифицирует п ол ьз овате л я или груп п у, к которой
она применяется, и определяет набор привилеги й , котор ыми наделя ются эти пол ьзо­
ватели . Списки AC L не имеют фиксированной дли н ы и могут содержать определения
прав м ножества пользователей или групп . Большинство о перацион н ых с истем ограни­
чивает длину отдельного списка ACL, но это ограничение может быть довольно слабы м
(обычно 32 зап ис и ) , которое достигается не часто.
Более сложные систе м ы позволяют адм и нистраторам указы в ать частич н ы е н або р ы
прав ил и отрицательные права, а некоторые из систем поддерживают н аследова н и е , ко­
торое позволяет определять права доступа для передач и их вновь создаваем ы м элем е н ­
там файловых систе м .
­
W Допол нительную информацию о б управлении конфигурацией см. в главе 2 3 .
П редуп реждение
Списки ACL получили ш ирокое распространение и п о это му будут зан и м ать все наше
внимание в остальной части этой главы. Однако н и оди н из переч и сл е н н ы х н иже фак­
тов не следует толковать как поощрение их использовать. Сп иски ACL и меют собствен ­
н у ю н и ш у, но она находится вне ос новного направления ад м и н и стрирования U N I X
и Linux.
Списки ACL существуют прежде всего для обеспе че н и я совмест и м ости с систе м а м и
Windows и удовлетворения потребностей малого се гм е н та предп р и я ти й , которы е фак­
тически требуют гибкости на уровне AC L. Они не явл я ются блестя щ и м следующим по­
колением средств управлен ия доступом и не пред наз н а ч е н ы для вытес н е н ия традицион ­
ной модели .
Сложность ACL создает несколько потенциальных п роблем. Списки ACL уто м ител ь­
ны в использовании, но также могут вызывать неожида н н ы е взаимоде йствия с системами
1 76
часть 1. Основы администрирования
резервного копирования , которые не предназначены д;1я работы с AC L, сетевыми файло­
вым и службами и даже с простыми программами , таким и как текстовые редакторы .
П оддержка с п ис ков AC L также , к а к правило, усложняется по м е р е увеличения ко­
личества записей . В реальном м ире они часто содержат рудиментарные записи, а также
записи, которые служат только для компенсаци и проблем, вызван ных предьщущи ми за­
пися м и . Эти сложные с п иски можно реорганизовать и упростить, но это рискованно
и требует м ного времени, поэтому делается редко.
В п рошлом коп и и этой главы , которые мы отправляли профессиональным адм ини­
страторам дл я просмотра, часто возвращались с таким и заметками , как " Эта часть вы­
глядит отлично, но я ничего не могу сказать, потому что я н и когда н е использовал AC L.:'.
Тип ы ACL
В качестве доминирующих стандартов для систем U N IX и Linux поя вились два вида
сп исков AC L: POS IX AC L и N FSv4 ACL.
Версия POSIX восходит к спецификации , созданной в середи не 1 990-х годов. К со­
жал е н и ю , ни оди н фактический стандарт н е был принят, и первоначал ьные реал иза­
ции с ил ьно различались. В наши дни мы находи мся в луч ш е й ситуации . Все с исте м ы
с вел ись в основном к си нхронизации AC L POS I X и общему набору команд, getfacl
и setfacl, дл я управления и м и .
В первом прибл ижен и и модель AC L POS I X просто расш иряет традиционную систе­
му разрешений U N IX rwx для обеспечения разрешений для нескол ьких групп и пользо­
вателей.
После появления списков POS I X AC L для с истем U N IX и Li nux все более распро­
стра н е н н ы м я вл е н и е м стал обм е н файловыми систе мами с операционной с исте мой
Wi ndows, которая и меет с вой собственный набор соглашен и й AC L. Здесь ситуация ус­
ложняетс я , поскольку Windows порождает множество различий, которые не встречаются
ни в традиционной модели U N IX, н и в экв и валенте ACL POS IX. С п ис ки AC L Wi ndows
также семантически более слож н ы ; например, они допускают отрицательные разреше­
ния (записи отрицания) и имеют сложную схему наследования.
Архитекторы четвертой верси и N FS - общего протокола обмена файлами - хотел и
внедрить с п иски AC L как сущности первого класса. Из-за разделения U N IX/Windows
и несоответствий между реал изаци ями AC L U N IX было ясно, что систем ы на концах
N FSv4-соединения часто могут и м еть разн ые тип ы . Каждая система может пон и мать
AC L, N FSv4, POS IX ACL , Windows AC L или вообще не AC L.
Ш Дополнительную информацию о протоколе N FSC см . в главе 2 1 .
Стандарт N FSv4 должен быть совместим со все м и эти м и разл и ч н ы м и м ирам и , не
вызывая сли ш ком м ного сюрпризов или проблем безопасности. Учитывая это ограниче­
ние, неудивительно, что с п иски AC L N FSv4 по сути являются объеди нением всех суще­
ствующих систе м . Они явл яются строгим надм ножеством списков AC L POSIX, поэтому
л юбой AC L POS IX может быть представлен как AC L N FSv4 без потери и нформаци и.
В то же врем я в AC L N FSv4 содержатся все биты разре ш е н и й , найде н н ые в с исте мах
Windows, и у них также есть бол ьш инство семантических фун кций Windows.
Реализа ция списков ACL
Теоретически ответствен ность за поддержку и функционирован ие с истем AC L мож­
но было бы п ереложить на ряд других ком понентов операционной систе м ы . С истемы
Глава 5. Файловая система
1 77
ACL могл и бы быть реализованы ядром от и м е н и всех файловых с исте м , отдельны м и
файловы м и с истемами или , может быть, таким и высокоуровневым и программам и , как
серверы N FS и SMB.
На практике поддержка AC L зависит от операционной и файловой систем . Файловая
с истем а, которая поддерживает списки AC L в одной операционной с исте м е , может н е
поддерживать их в другой или может предусматривать несколько другую реал изаци ю ,
поддержи ваемую другими командами .
Демоны службы файлов отображают собственную схему AC L своего узла (или схемы)
в соответстви и с соглашения м и , соответствующи м и файловому протоколу: N FSv4 AC L
для N FS и ACL для Windows для S M B . Детали этого отображен и я зависят от реализации
файлового сервера. Как правило, правила сложны и н астраиваются с помощью опций
конфи гурации .
Поскольку реал изации списков ACL зависят от кон кретной файловой систе м ы и опе­
рационные систе м ы поддерживают несколько реализаци й файловых систе м , во м ногих
системах предусматривается поддержка нескольких типов с п ис ков ACL. Даже отдельно
взятая файловая с истема может предложить нескол ько вариантов ACL, как в систем е
Z FS . Есл и возможно испол ьзование нескольких с истем ACL, команды п о управлению
и м и могут быть одинаковы м и или различными - все зависит от конкретной с истемы.
Поддержка ACL в системе Li nux
С истем а Linux стандартизировала с п иски AC L в стиле PO S I X . П ротокол
N FSv4 ACL на уровне файловой с исте м ы не поддерживаетс я , хотя , конеч­
но, систе м ы Linux могут монтировать и совместно испол ьзовать файловые
с исте м ы N FSv4 по сети .
Преимущество этой стандартизаци и заключается в том , что почти все файловые си­
стемы Linux теперь вкл ючают поддержку AC L POS IX, в ключая XFS, Bt rfs и семейство
ext * . Даже Z F S , ч ья собствен н ая с истем а AC L поддерживает протокол N F Sv4, была
перенесена в Linux с помощью POSIX ACL. Стандартные команды getfacl и se tfacl
могут использоваться везде , независимо от типа базовой файловой с истемы. (Тем не ме­
нее иногда следует проверять, что для монтирования файловой систе м ы ис пол ьзуется
правильная опция монтировани я . Файловые системы обычно поддерживают параметр
a c l , параметр no a c l или оба, в зависимости от их значен и й по умолчанию.)
W Дополнительную информацию о сервере S M B см . в главе 2 2 .
С истем а Linux и меет н абор команд (nf s 4 _g e t f a c l , n f s 4 _ s e tf a c l и n f s 4
edi tfacl) дл я обработки списков файлов ACL N FSv4, установленных на серверах N FS .
Однако э т и команды н е могут применяться к локально сохране н н ы м файлам . Более
того, они редко вкл ючаются в дистрибутивы программного обеспечен и я по умолчанию;
вам придется устанавл ивать их отдельно.
Поддержк а ACL в системе FreeBSD
Систем а Free B S D поддерживает как AC L PO S IX, так и AC FS N FSv4. Его
родн ые команды ge tfacl и s e tfacl были расш ирены , чтобы вкл ючить
AC L в стиле N FSv4. Поддержка AC L N S Fv4 появилась относительно недавно (с 20 1 7 г. ) .
Файловые систе м ы U FS и Z FS поддержи вают ACL в стиле N FSv4, причем U FS так­
же поддерживает AC L PO S IX. П отен ц иал ьн ы м источн иком путани цы здесь является
Часть 1. Основы администрирования
1 78
файловая с истема Z F S , которая поддерживает только протокол N FSv4 в систе м е B S D
(и ее предшествен н и ке - с истеме Solaris) и только POS IX в с истеме Liпux.
Для файловой с исте м ы U FS следует испол ьзовать оди н из вариантов монтирования
a c J. s или n f s v 4 a c l s , чтобы указать, чеrо и м е н но вы хотите. Эти варианты я вляются
взаи моисключающ и м и .
Обзор POSIX ACL
П о существу, списки POSIX AC L Liпux представл я ют собой простое рас ш и р е н и е
стандартной 9-битовой U N \Х-модел и прав доступа. Система поддержи вает только права
чте н ия , зап ис и и выпол н е н и я . Такие дополн ительные атрибуты, как s e t u i d и допол­
н и тел ьные биты , обрабаты ваются исключ ител ьно традицион н ы м и битам и оп ределе ния
режима.
С п иски AC L позволяют устанавл ивать биты rwx независимо мя л юбой комбинации
пол ьзователей и rрупп. Возможный вид отдел ьн ых записей в AC L приведен в табл . 5.7.
Таблица 5 . 7 . За писи , которые мо гут встретиться в списке у правления доступом
П ример
Фо рмат
а
Получ атель права доступа
u s e r : : пра в а_до с тупа
u s e r : : rw -
Владелец файла
11 s e r : имя_ поль з ов а тел я : пра в а_до с тупа
u s e r : t r e n t : rw-
Конкретный пользователь
g r oup : : пра в а_д о с тупа
g r oup : : r - x
Группа, которая владеет файлом
g .r oup : имя_ группы : пра в а_д о с тупа
g r oup : s t a f f : rw -
Конкретн ая группа
о t h е r : : пра в а_до с тупа
other : : - - -
Всех другие пользователи
rr,a s k : : пра ва_до с тупа
ma s k : : rwx
Все, кроме владельца и других
пользо вателей•
Иногда мас ки не совсем понятны ; пояснения к ним даны далее в этом разделе.
Пол ьзователе й и rруп п ы можно задавать именами ил и идентификаторами U I D/G I D.
То•1 ное ч исло записе й , которое может содержать с п исок ACL , зависит от реал изаци и
фа йловой с исте м ы , н о , как правило, оно н е м е н ьше 3 2 . Вероятно, это практич еск и й
предел мя поддержки AC L.
Взаимо действие между трад иционными режимами и списками ACL
П р и испол ьзовании списков AC L файлы сохраняют свои исходные биты режи ма, но
при этом автоматически поддерживается целостность атрибутов, и два набора прав до­
ступа не моrут вступить в конфл икт. Н иже приведен пример ( испол ьзуется си нтаксис
команд с исте м ы Liпux) автоматического обновления зап исей AC L в ответ на измене н и я ,
выполненные " старой" командой chmod.
$ touch example
$ ls -1 example
- r w - r w- r - - 1 g a r t h g a r t h
$ ge tfacl example
# f i l e : e x amp l e
# owne r : g a r t h
# g r oup : g a r t h
u s e r : : rw
g r oup : : rw
othe r : : r-$ chmod 6 4 0 example
О Jun 1 4 1 5 : 5 7 e x amp l e
Глава 5. Файловая система
1 79
$ ls -1 example
- rw - r - - - - - 1 g a r t h g a r t h
О Jun 1 4 1 5 : 5 7 e x ampl e
$ getfacl - -omit-header example9
u s e r : : rwg roup : : r - o t he r : : - - -
Эта принудительная целостность атрибутов позволяет более стары м программам , ко­
торые даже н е подозревают о существовании списков ACL, достаточно успешно рабо­
тать в среде , испол ьзующей эти списки . Однако существует и определен ная проблема.
Несмотря на то что АСL-запись g r o u p : : в приведе нном примере вроде и отслеживает
средни й набор традиционных битов режима, это не всегда так.
Для того чтобы понять, в ч е м здес ь дело, предположите , что унаследованная про­
грамма очищает биты разрешения записи во всех трех наборах прав традиционного ре­
жима (например, chmod ugo-w ф а йл) . Понятно, что целью выпол н е н и я этой команды
является запрет выпол н е н ия записи в файле ке м -л ибо. Но что произойдет, есл и резуль­
тирующий список AC L будет выглядеть следующи м образом?
user : : r-­
gr oup : : r - ­
group : s t a f f : rw ­
oth e r : : r - -
С точки зрения унаследованной п рограмм ы файл выглядит неизменяем ы м , хотя в дей­
ствительности он доступен для зап иси любому члену группы s t a f f. Подобная с итуация
нежелательна. Для с нижения вероятности недоразумений приняты следующие правила.
•
•
•
•
По определению записи u s e r : : и o t h e r : : списка AC L иденти ч н ы битам режи­
ма " владелец" и "другие " традиционного режима файла. Изменение режима ведет
к изменению соответствующих записей ACL и наоборот.
Во всех случаях эффективн ы ми правам и доступа, предоставляе м ы м и владел ьцу
файла и пользователям , которые н е указан ы как-либо и н аче, я вл яются те , кото­
рые указаны в соответствующих зап исях u s e r : : и o t he r : : списка AC L.
Если файл не и меет явно определенного с писка AC L или и м еет AC L, который
состоит только из одной записи u s e r : : , одной зап ис и g r o u p : : и одной запи ­
си o t h e r : : , эти записи иде нтичн ы тре м наборам традиционных б итов режима.
И ме н но такой случай продемонстрирован в приведен ном выше примере примене­
ния команды getfacl. ( Подобн ый AC L называют м и н и мал ьн ы м , и он н е требует
действительной реализаци и в виде логически отдельного ACL. )
В более сложных с писках ACL традиционные биты режима соответствуют специ­
ал ьной записи AC L, называемой " маской " , а не записи g roup : : . Маска огран и ­
ч и вает доступ так, что ACL может предоставлять права всем названы м пользовате­
лям, всем названы м группам и группе, заданной по умолчан ию.
И наче говоря , маска определяет верхн и й предел прав доступа, которые система ACL
может присваивать отдельным группам и пользователям. Концептуально эта маска ана­
логична команде umask, за исключением того, что маска ACL действует всегда и указы­
вает п редоста вле н н ые , а не отобран н ы е права. Записи ACL дл я названых пользовате­
лей, названых групп и групп ы , заданной по умолчанию, могут содержать права доступа,
отсутствующие в маске, но ядро будет просто их игнорировать.
9 Это п р и мер из систем ы Linux. В системе Fre e B S D для подавления в ы вода к ом ме нтари ев на
дисплей версия команды getfacl использует флаг -q, а не - - omit-header .
1 80
Часть 1. основы администрирования
В результате традицион н ые биты режима не в состоян и и умен ьш ить права , глобал ь­
но предоставл е н н ые сп иском AC L. Более того, удаление бита из части группы традици­
он ного режима ведет к удалению соответствующего бита в маске AC L и , следовательно,
к л и ш е н и ю этих прав всех пол ьзовател е й , кроме владельца файла и тех, кто относ ится
к категории "другие " .
П ри расширен и и списка AC L, при веден ного в предыдущем примере, для включения
в него записей конкретного пол ьзователя и группы команда setfacl автоматически
определяет соответствующую маску.
$ ls - 1 example
О J u n 1 4 1 5 : 5 7 e x amp l e
- rw- r - - - - 1 garth garth
$ setfacl - m user : : r , user : trent : rw , qroup : admin : rw example
$ ls -1 example
- r - - rw - - - - +
1 g a r t h g a r t h О Jun 1 4 1 5 : 5 7 e x amp l e
$ qe tfacl - - omi t-header example
user : : r-u s e r : t r e n t : rwg r oup : : r - g r oup : admin : rwma s k : : rw othe r : : - - -
П арам етр - m для команды setfacl означает " измен ить" : он добавляет запис и , ко­
торых еще нет, и н астраи вает те , которые уже существуют. Обратите внимание: команда
setfacl генерирует маску, которая позволяет вступ ить в действие всем права м , предо­
ставлен н ы м в с п иске AC L. Для определения маски вручную н ужно вкл ючить ее в спи­
сок записей AC L, п ереда н н ы й команде setfacl , л ибо испол ьзовать опцию -n, чтобы
помешать ее повторному генерированию командой setfacl .
Обратите вн и мание на то, что в результате выпол н е н ия второй команды l s -1 (по­
сле команды setfacl) в кон це режим а файла вы водится знак " + " , означающий , что
с н и м теперь связан реальн ы й список AC L. Первая команда l s - 1 н е выводит знак " + " ,
поскольку н а данн ы й момент список AC L является " м и н имальн ы м " .
Следует и меть в виду, что применение традиционной команды chmod для манипули ­
рования правами доступа групп ы в файле, связанном с AC L, с казы вается только на ма­
ске. Продолжим рассмотре ние предыдущего примера.
$ chmod 7 7 0 example
$ ls - 1 example
- rwx rwx - - - + 1 g a r t h s t a f f О Jun 1 4 1 5 : 5 7 e x ampl e
$ qe tfacl - - ollli t-header example
u s e r : : rwx
u s e r : t r e n t : rwg r oup : : r - g r oup : a dmi n : rw-
ma s k : : rwx
othe r : : - - -
8 дан ном случае результат выпол н е н ия команды l s вводит в заблуждение. Несмотря
на обш ирные права, предоставл е н н ы е группе, н и оди н из ее членов в действител ьно­
сти не обладает правами выпол нения файла на одном л и ш ь основании принадлежности
к группе. Для того чтобы предоставить это право, придется отредактировать список AC L
вруч ную.
Чтоб ы пол н остью удал ить AC L и вернуться к стандартной с исте м е разре ш е н и й
U N IX, используйте команду setfacl - bn . (Строго говоря , флаг -n нужен только в с и -
Глава 5. Файловая система
1 81
стеме Free B S D . Без него команда setfacl в с истем е Free B S D создает набор рутин ных
масок, которая позже испортит изменения в групповом режиме. Однако в с истеме Linux
флаг n можно установить, не создавая проблем. )
-
Опред еление прав доступа
При попытке получения процессом доступа к файлу идентификатор U I D сравн и ва­
ется с U I D владельца файла. Если они совпадают, права доступа определя ются правами
u s e r : : в списке ACL. В противном случае при нал ичии соответстви я записи кон крет­
ного пользователя в AC L права определя ются этой записью и м аской AC L.
П ри отсутствии подходящей записи конкретного пользователя файловая система пы­
тается найти подходящую запись групп ы , предоставляющую запрошенные права. Эти
записи также обрабатываются в сочетании с маской AC L. При отсутствии подходящей
записи права доступа определяются записью o t he r : : .
Наследование списков ACL
Кроме типов записей , перечислен ных в табл . 5 . 7 , списки ACL каталогов могут со­
держать зап иси , определенные по умолчани ю , которые передаются спискам ACL новых
файлов и подкаталогов в нутри н их. П одкаталоги получают свои записи как в форм е за­
писей акт ивного AC L, так и в форме записе й , заданных по умолчани ю . Следовательно,
исходные заданные по умолчани ю записи могут со временем распространяться по н е ­
скольким уровням иерархи и каталогов.
При копировании записей , заданных по умолчанию, связь между родител ьским и до­
черни м и списками AC L не сохраняется. Изменения в задан ных по умолчан и ю записях
родительского каталога не отражаются в списках ACL существующих подкаталогов.
С помощью команды setfacl -dm можно установить записи AC L по умолчан ию.
Кроме того, записи , заданные по умолчанию, можно включ ить в обычные записи спи­
ска управления доступом , поставив перед н и м и префикс :
Если каталог имеет хотя бы одну запись по умолчани ю , он должен вкл ючать полный
набор значений по умолчан и ю для зап исей u s e r : : , g r oup : : , o t h e r : : и ma s k : : .
Команда setfacl будет заполнять л юбые записи по умолчанию, которые вы не укажете
путем копирования их из текущего списка разрешений AC L, создавая м аску как обычно.
.
Списки N FSv4 ACL
В этом разделе рассмотрим характеристики списков N FSv4 AC L и с интак­
сис команд на примере систе м ы Free B S D . Они н е поддерживаются систе ­
мой Linux (демоны которой отличаются от служб N FS).
С точ к и зре н ия структуры с п иски N FSv4 AC L аналогичны сп искам AC L в системе
Windows. Основное различие между н и м и состоит в спецификации категори и , к которой
относится запись контроля прав доступа.
В списках AC L обеи х с истем запись хранится в виде строки. Для списков Windows
AC L эта строка обычно содержит идентифи катор защиты Windows (Wi ndows security
identifier - S I D) , в то вре м я как N FSv4-cтpoкa , как правило, и меет такой фор мат:
u s е r : имя_ поль з о в а теля или g r о u р : имя_ группы. Она также м ожет и м еть оди н из
специальных маркеров: owne r @ , g ro u p @ или eve ryo n e @ . В действительности эти "спе­
циальные" записи можно считать самы м и популярными, поскольку они связаны с бита­
ми режима доступа, установлен н ы м и для каждого файла.
Часть 1. Основы администрирования
1 82
Такие систе м ы , как Samba, которые разделя ют файл ы между систе м а м и U N J X
и Windows, должны обеспечивать определен н ы й способ преобразования дан ных м ежду
Windows и N FSv4.
Модель прав доступа с истем Wi ndows и N FSv4 отл ичается большей детал и заци ­
е й по сравн е н и ю с традиционной U N J Х - м одел ью " чтен ие - за п ись- в ы п ол н е н ие " .
Рассмотрим е е основные отличительные черты .
•
•
•
•
В с истеме N FSv4 разреше н и е на создание файлов в каталоге отл ичается от разре­
шения создавать подкаталоги .
В с истеме N FSv4 предусмотрен отдел ьн ый бит разрешения на "добавление " .
В с истеме N FSv4 предусмотрен ы отдельные биты разрешения на чтение и зап ись
м я данн ых. файловых атрибутов, расширенных атрибутов и AC L.
В системе N FSv4 реализовано управление возможностью пользователей менять вла­
дельца файла посредством стандартной системы AC L. В традиционной модели U N JX
возможность менять владельца файла обычно имеет только суперпользователь.
В табл . 5 . 8 приведе н ы различные разрешения (права доступа) , которые могут назна­
чаться в с истеме N FSv4, а также однобуквенные коды , используе м ы е м я их представ­
ления.
Таблица 5.8. Пра в а доступа к файлам в системе NFSv4
Код
Имя
r
r e a d _d a t a
Чтение данных файла или пол учение содержимого каталога
w
writ e data
х
Запись данных в файл или создание файла в каталоге
execute
Выполнение файла как про граммы
р
append d a t a
Добавление данны х в файл или создание подкаталога в каталоге
Права доступа
-
-
D
delete child
Удаление дочернего каталога в катало ге
d
delete
Удаление
а
read a t t ribut e s
Чтение нерасширенных атрибутов
А
w r i t e a t t r i bu t e s
R
read xattr
w
Запись нерасширенных атрибутов
Чтение именованных ( " расширенных " ) атр ибутов
writ e x a t t r
с
Запись имено ванных ( " расширенны х " ) атрибутов
read acl
Чтение сп иска управления доступом
с
-
-
-
-
wr i t e a c l
о
Запись списка управления доступом
w r i t e own e r
Изменение владельца
s
s yn c h r on i z e
Допускает запросы на синхронный ввод-вывод (обычно и гнорируетс я )
-
-
Несмотря на т о что в системе N FSv4 модель п р а в доступа достаточно детализирова­
на, отдельные разрешения должны быть очевидн ы м и , т.е . не должн ы требовать допол ­
н ительных разъяснен и й . Разрешение " s yn c h r o n i z e " позволяет клиенту указать. что
модификации файла должны быть си нхронизирован ы , т.е. вызовы, с вязан ные с записью
дан н ых , не должны завершаться до тех пор , пока дан н ы е не будут реал ьно сохранены
на диске .
Рас ш ире н н ы й атрибут - это именованная часть данных, которая сохраняется вместе
с файлом. Бол ьшинство современных файловых систем поддерживают такие атрибуты,
хотя они пока не нашли широкого применения . В настоя щее время рас ш ирен ные атри-
глава 5. Файловая система
1 83
буты в основном испол ьзуются д;1я сохранения самих списков AC L. Однако модел ь прав
доступа в с истеме N FSv4 предусматривает обработку списков ACL отдельно от других
расш иренных атрибутов.
В системе Fre e B S D владелец файла всегда и меет разрешения r e a d_a c l , w r i t e a c: l ,
r e a d_a t t r ib u t e s и w r i t e a t t r i b ut e s , даже есл и в списках управлен и я доступом за­
дан ы другие значения.
Объ екты NFSv4, для которых можно задавать права доступа
В допол н е н и е к обыч н ы м с п е ц и ф и каторам u s е r : имя_ п о л ь з о в а т е л я и л и
g r oup : имя_ группы в с истеме N FSv4 определено е щ е несколько объектов, которые мо­
гут быть указаны в сп иске AC L. Сам ы м и важны м и из них явл я ются o w n e r @ , g r o 1J p @
и eve r yone @ , которые связаны с традицион н ы м и категори я м и в девятибитовой модели
прав доступа.
С истем а N FSv4 отличается от POS IX по ряду признаков . П режде всего, те м , что
N FSv4 не и меет стандартного объекта, испол ьзуемого по умолчан и ю д;1 я управления
наследованием списков AC L. Вместо этого л юбая отдельная запись управления досту­
пом (АС Е) может быть помечена как передающаяся по н аследству ( с м . н иже раздел
" Наследован и е списков AC L в протоколе N FSv4 " ) . Кроме того, система N FSv4 не ис­
пол ьзует маску д;1я согласования прав доступа, заданных в режиме файла с помощью
сп иска AC L. Реж и м , н еобходим ы й для согласован и я с параметрам и , задавае м ы м и
д;1 я owne r @ , g r o u p @ и eve r yone @ , а также файловые систе м ы , которые реализуют с п и ­
с к и N FSv4 AC Ls, должны сохранять эту совместим ость при обновл е н и и режима л ибо
списка АС L.
Определение прав доступа в протоколе NFSv4
Система N FSv4 отл ичается от POS IX тем , что в записи АС Е указывается только ча­
стичный набор разрешений. Каждая запись АСЕ является либо разрешающей, л ибо запре­
щающей ; она действует больше как маска, чем авторитетная спецификация всех возмож­
ных разрешений. Множестве н н ые АСЕ могут применяться к любой заданной ситуации.
При принятии решения о разрешени и конкретной операции файловая с истема сч и ­
ты вает список AC L по порядку, обрабатывая зап иси до тех пор, пока все запрош е н н ы е
разреш е н и я н е будут предоставлены ил и какое-либо запроше нное разрешение будет
отклонено. Рассматриваются тол ько те запи с и , чья орган изация строки совместима
с идентификатором текущего пользователя . Этот процесс итеративной оценки означает,
что значен ия owne r @ , g r o u p @ и a l l @ не я вляются точ н ы м и аналога м и соответствую­
щих битов традиционного режима. Список AC L может содержать множественные коп и и
этих элементов, и их приоритет определяется порядком появления в AC L, а не соглаше­
нием. В частности , значение eve r y o n e @ действительно относится ко всем пользовате ­
лям, а не только к тем , которые не задан ы более конкретно.
Файловая система может " пройти" список N FSv4 ACL до кон ца, н е получи в опреде­
лен ного ответа на запрос прав доступа. В этом случае стандарт N FSv4 считает получ е н ­
ный результат неопределен н ы м , однако большинство существующих реал изаций выбе ­
рут доступ с отказом , во- первых, потому, что такое соглашение испол ьзуется в с истем е
Windows, и , во-вторых, потому, что это единственный вариант, который и меет с м ысл .
Наслед ование списков ACL в протоколе NFSv4
П одобно спискам POS IX AC L, с п иски N FSv4 AC L позволяют созда н н ы м объектам
наследовать зап иси управления доступом от вкл ючающего их каталога. Однако система
Часть 1. Основы администрирования
1 84
N FSv4 при небольшом выигрыше в возможностях гораздо более запутана по сравнению
с POSIX. Н иже перечислены причины такой запутанности .
•
•
•
•
•
Л юбая зап и с ь может быть отм ечена как наследуемая. П ризнаки наследования
для создаваемых подкаталогов ( d i r_ inheri t или d) и создаваем ых файлов ( f i l e
i n h e r i t или f ) устанавливаются п о отдельности.
Можно п р и м е нять разл и ч н ы е зап иси управления доступом для новых файлов
и новых каталогов путем создания отдел ьных записей управления доступом в ро­
дител ьском каталоге с соответствующ и м и признака м и . Можно также примен ить
одну запись АС Е ко всем новы м дочерни м записям (любого типа) за счет включе­
н ия обоих флагов d и f .
С точки зрения определения прав доступа записи управления доступом оказывают
оди наковое влияние на родител ьский ( исходн ый) каталог независимо от того, на­
следуе м ы й он ил и нет. Если вы хотите применить зап ись к дочернему, но не к ро­
дительскому каталогу, включ ите для соответствующей записи АС Е флаг i nh e r i t
on l y ( i ) .
Новые подкаталоги обычно наследуют две копи и каждой записи АС Е: с отклю­
ченными флага м и наследовани я (применя ется к самому подкаталогу) и с вклю­
чен н ы м флагом i n h e r i t o n l y ( устанавл и вает новый подкаталог дл я распро­
странения с воих передаваем ых по наследству зап исей АС Е). Вы можете подавить
создание этой второй записи АС Е в кл ючением флага no _p r o p a g a t e ( n ) дл я ко­
п и и записи АС Е родительского каталога. Конеч н ы й резул ьтат состоит в том , что
запись АС Е распространяется только на пря м ых потомков исходного каталога.
Не путайте рас пространение зап исей управления доступом с настоящим наследо­
ван и е м . Установка связанного с наследован ием флага для записи АС Е просто оз­
начает, что дан ная зап ись АС Е будет скопирована в новые записи. Она не создает
никаких постоян н ых отноше н и й между родителе м и е го потом ком . Если вы позже
измените записи АСЕ для родител ьского катал ога, дочер н и е каталоги при этом
не будут обновлены.
Различные флаги наследования приведен ы в табл . 5.9.
Таблица 5 . 9 . Фла ги наследования в системе NFSv4 АСЕ
Код
Имя
Назначение
f
f i l e_i n h e r i t
Р аспространение записи АСЕ на создаваемые файлы
d
d i r - i nh e r i t
Распространение записи АСЕ на создаваемые подкаталоги
i
i n h e r i t _o n l y
n
n o_p r op a g a t e
Р ас п ространение , но не применение к текущему катало гу
Р ас п ространение на новые подкатало г и , но не на их п отомков
Просмотр списков NFSv4 ACL
С исте ма Free B S D расширила стандартные команды se tfacl и getfacl , исполь­
зуе м ые для работы со с п ис ками POSIX AC L, чтобы обес печить дополн ительную воз­
можность обработки с писков N FSv4 AC L. Например, вот как в ы гл ядит с писок AC L
для только что созданного каталога.
f r e e b s d $ mkdir example
f r e e b s d $ l s - ld example
drwx r - x r - x 2 g a r t h s t a f f 2 Aug 1 6 1 8 : 5 2 e x arnp l e /
Глава 5. Файловая система
1 85
$ qetfacl -q example
owne r @ : rwxp - - aARWcCos : - - - - - - : a l l ow
group@ : r - x - - - a - R- c - - s : - - - - - - : a l l ow
eve r yone @ : r - x - - - a - R - c - - s : - - - - - - : al l ow
Флаг -v запраши вает подробные имена разрешений.
f re e b s d $ qetfacl -qv example
owne r @ : r e a d_da t a / wr i t e_da t a / e x e c u t e / append_dat a / r e ad_a t t r i bu t e s /
w r i t e_a t t ribu t e s / r e a d_xa t t r /w ri t e_xa t t r / re a d_ac l /wri t e_a c l /
w r i t e_own e r / s yn c h r o n i z e : : a l l ow
g r oup@ : r e ad_da t a / e x e cu t e / r e a d_a t t r i b ut e s / r e a d_x at t r / r e a d_acl /
s yn c h r o n i z e : : al l ow
eve r yone @ : re ad_da t a / ex e cu t e / r e a d_a t t r i b u t e s / r e a d_xa t t r / r e ad_a c l /
s ynchroni z e : : a l l ow
m М ы отфор матировали этот вы вод и расставили косые ч е рты , чтобы его было л е гче
читать.
Может показаться , что создаваем ы й каталог получает сложны й с писок ACL , н о
на самом деле это не так: список ACL - всего лишь девятибитовый код режима, отобра­
жае м ы й в первой строке резул ьтата, преобразуемого в форм ат с писка AC L. Совсем не
обязательно хранить реальный список ACL в файловой с истеме, поскольку список ACL
и режим доступа эквивалентн ы . (Такие списки ACL называются тривиальным и . ) Если
бы каталог и м ел реальный список ACL, команда l s , чтобы обозначить наличие списка
ACL , отображала бы биты режима со знаком " + " в конце (например, drwx r - x r-x+).
Каждое нум ерованное выражен и е представляет одну запись управления доступом.
Вот как выглядит ее формат.
объект : пра в а_дос тупа : фл а ги_на следова ния : тип
Поле о бъ е к т может зани м ать одно из таких ключевых слов, как owne r @ , g r o up @ ,
eve r y o n e @ , или эле мент в такой форм е: u s e r : имя_ полъ з о в а т еля л ибо g r o u p : имя_
группы. Оба поля пра в а_ доступа и фла ги_ на следования представл я ют собой списки
опций , разделенные косыми чертам и в развернутом виде ил и в стиле битовых масок ко­
манды l s в лаконич ном виде . Поле тип в записи АСЕ задает оди н из двух возможных
вариантов: разрешение или отказ.
Испол ьзование двоеточия в качестве разделителя в поле объект усложняет синтак­
сический разбор вывода команды getfacl независи мо от испол ьзуемого формата. Если
вам необходимо обрабатывать с п иски ACL програ м м но, луч ш е всего испол ьзовать мо­
дульный интерфейс прикладного програ м м ировани я , а не сценарий синтаксического
разбора выходной и нформаци и .
Взаимодействие между списками ACL и тра д иционными режимами
Режим и список AC L должны оставаться совместим ы м и , поэтому при корректиро­
ван и и одного из этих вариантов другой обновляется автоматически. Файловая с истема
может определить соответствующий режим мя заданного списка ACL, но ее ал горитм
ге нерирован и я и обновл е н и я сп исков AC L в ответ н а изменен ия режи мов остает­
ся сли ш ком сложн ы м , особен но д;1я существующих AC L. В частности , мя категори й
own e r @ , g roup @ и eve ryone @ система может сгенериро вать несколько наборов зап исей
(и притом противоречивых) , которые будут зависеть от порядка их агрегировани я .
Лучше всего н икогда не изменять режим файла или каталога после применения с п и ­
ска АСL.
Часть l. Основы администрирования
1 86
Мод иф икация списков ACL NFSv4
Поскольку система разрешени й обеспечивает согласованность между режимом фай ­
ла и его AC L, все файлы имеют как м и н имум тривиальный список AC L. Следовательно,
измен е н ия списков AC L всегда обновляются. Изменения спис ка AC L осуществля ются
с помощью команды setfacl, по•1ти так же , как и в режиме AC L POS IX Основное отли­
чие состоит в том , что порядок записей списка управления доступом является значимым
для протокола N FSv4, поэтому м ожет потребоваться вставить новые записи в определен­
ную точку в существующе м списке AC L. Это можно сделать это с помощью флага -а:
setfacl
-
а
позиция з а писи фа йл . . .
Здесь позиция
это и нде кс существующей записи управления доступом (нумеруется
начиная с нул я ) , перед которой должн ы быть вставле н ы новые записи. Например , ко­
манда
-
$ se tfacl
-а
О user : ben : full_set : : deny ben keep_out
_
устанавл ивает запись управления доступом в файле b e n k e e p ou t , которая запреща­
ет все разреш е н ия пол ьзовател ю b e n . Обознач ение full_set
это сокращенное обо­
значение, включающее все возможные разрешения. (В настоящее вре мя эти разреш е н ия
имеют вид rwxpDdaARWcCo s , сра вните их с табл . 5 . 8 . )
П оскольку новая запись управления доступом вставлена в нул е вое положе н и е , она
проверяется первой и и меет приоритет над более поздни м и записям и . Пользовател ь ben
будет ли ш ен доступа к файлу, даже есл и , например , разрешение eve r yone @ предостав­
ляет доступ други м пользовател я м . Для иде нтификации разре ш е н и й можно испол ьзо­
вать дл и н н ые имена, такие как w r i te da t a . Отделите нескол ько дл и н н ых имен косой
чертой . Не следует смеш и вать однобуквен ные коды и дл и н н ые имена в одной команде .
Как и в спис ках POS I X AC L, для добавл е н ия новых записей в конец существующе­
го списка AC L можно испол ьзовать флаг m Что касается сложных измене н и й в суще­
ствующих списках AC L, лучше всего записать ACL в текстовы й файл , отредактировать
записи управле н ия доступом в те кстовом редакторе , а затем перезагрузить весь список
AC L. Например:
_
-
-
.
$ getfacl -q file> / tmp/ file . acl
$ vi / tmp/file . acl
# В н е с и т е н е о б х од имые и зме н е ни я
$ setfacl -Ь -м / tmp/file . acl file
Параметр -Ь команды se tfacl удаляет существующий с писок AC L перед добавле­
нием зап исей управления доступом , переч ислен н ы х в файле file . acl . Это позволяет
удалять запис и , просто стирая их в текстовом файле.
глава
6
инсталляция и управление
пр о гра ммным о б е сп е ч ением
�
И нсталляция п рограм м н ы х средств , н астрой ка их конф и гура ц и и и управл е н и е
и м и - основные обязан ности с исте м н ых адми нистраторов. О н и отвечают н а запросы
пользователей и нсталлировать и настроить конфигурацию п рограм м , усоверш енство­
вать средства защиты их дан ных и устран ить прорехи в системе безопасн ости, а также
управляют переходом к новым версиям програ м м , которы е , с одной стороны , предла­
гают новые возможности , а с другой сторон ы , чреваты проблемами несовмести мости .
Администраторам обычно приходится выпол нять перечисленные н иже задачи :
• осуществлять автоматизирован н ую инсталляцию операцион ной систе м ы на груп­
пу компьютеров ;
•
выполнять настройку операционн ых систем в локальных средах;
•
следить за выходом исправлений и с воевременно обновлять с их помощью с исте­
му и приложе н ия ;
•
управл ять добавочн ы м и программ н ы м и пакетами .
П роцесс настройки конфигурации готового дистрибути ва или программного пакета,
направл е н н ы й на удовлетворение всех потребностей пользователе й ( и не допус кающий
наруше н ия локал ьн ых услови й защиты , размещения файлов и топологии сети ) , часто
назы вают локализацией . В этой главе рассматрива ются м етодики . которые позволяют
Часть 1. Основы администрирования
1 88
упростить и нсталляцию программ ного обеспечен ия , в том ч исле в крупн ых системах.
Мы также рассмотрим процедуру и нсталляции лля каждого из наших п ри меров опера­
ционных с исте м , включая некоторые возможности автоматизаци и , испол ьзующие рас­
пространенные инструменты ( предназначенные лля конкретной платформ ы ) .
6 . 1 . И НСТАЛЛЯЦИЯ ОПЕРАЦИОННЫХ СИСТЕМ
Процедура и н сталляции дистрибутивов Linux и FreeB S D довольно проста. Обычно
лля и нсталляции необходимо загрузиться с внешнего U S В-устройства или оптического
носител я , ответить на ряд вопросов, выбрать конфигурацию разделов диска и указать
программе-инсталлятору, какие программ н ые пакеты нужно установить. Такие с исте м ы ,
как Ubuntu и OpenSolaris, включают опцию " l ive " , которая позволяет запускать операци ­
онную систем у, не и нсталлируя ее в действительности на локал ьн ы й диск.
И н сталляция базовой операционной систе м ы с локального носителя представляет
собой довольно тривиал ьную операци ю благодаря приложениям с графическим поль­
зовательским и нтерфейсом , которые обеспечивают в ы полнение всех этапов этого про­
цесса. В табл . 6. 1 перечисл е н ы указатели на подробные и нструкции по и нсталл я ц и и
лля каждого из наших примеров дистрибутивов.
Таблица 6 . 1 . Документация по инсталляции
Дистрибутив
Источник документации
Red Hat
redhat . com/docs /manuals /enterprise
CentOS
wiki . centos . org/Manuals/Release/Note s / CentOS 7
Deblan
deЬian . org/releases / s taЫe/ i s tallmanual
Ubuntu
help . uЬuntu . com/ communi ty/Installation
FreeBSD
freebsd . org/doc/handЬook/Ьsdinstall . html
З а грузка по сет и на персонал ьном комп ьютере
Л юбой , кому придется и нсталлировать с истему сразу н а нескольких ком п ьютерах,
столкнется с н едостатками и нсталляции в интерактивном режиме. Это большие затраты
времен и , предрасположен ность к ошибкам и с кучная необходимость повторения стан ­
дартного процесса и нсталляции на сотнях систе м . Свести к м и н и муму человеческий
фактор можно благодаря контрол ьному списку локализации, хотя даже е го использова­
ние не сможет полностью защитить от всевозможных ошибок.
Для того чтобы ослабить воздействие перечисл е н н ых в ы ш е факторов, бол ьш и н ­
ство систем включает возможности и нсталляции п о сети , которые упрощают п роведе­
ние крупномасштабных и нсталляций. В самых распростран енных м етодах лля загрузки
с исте м ы без испол ьзования физического носителя испол ьзуются сетевые протокол ы
D H C P и TFTP, после чего из сетевого сервера и звле каются файлы и нсталляции через
протоколы НТТР, N FS или FТР.
П редзагрузочная среда выполнения (Preboot eXecution Environment
РХЕ ) позволя­
ет полностью выпол нить инсталляцию операционной с истем ы без вмешательства поль­
зователей. Она была разработана компанией l ntel как стандарт, позволяющий загружать
с исте м ы через сетевой интерфейс. Особенно хорошо она зарекомендовала себя в вирту­
альных средах.
-
Глава 6. Инсталляция и управление программным обеспечением
1 89
Стандарт РХЕ действует подобно м и ни атюрной операционной системе, размещен­
ной в схеме ПЗУ на вашей сетевой плате . Он предnагает с истеме BIOS использовать его
сетевые особенности посредством стандартизованного и нтерфейса API . При таком вза­
имодействии оди н загрузчик может загружать по сети операционную систему на л юбом
персонал ьном ком п ьютере, пон и мающем стандарт РХЕ , не устанавливая при этом ка­
кие-л ибо специальные драйвера дnя каждой сетевой платы.
W Дополнительную информацию о протоколе DHCP см . в разделе 1 3.6.
Внешняя (сетевая) часть протокола РХЕ н е содержит н и каких сложностей и по­
добна процедурам загрузки по сети , испол ьзуе м ы м в других архитектурах. Ком пьютер
осуществляет ш ироковещательную рассылку специал ьного D Н С Р-запроса с установ­
л е н н ы м РХЕ-флаго м , а D Н С Р-сервер или прокси-сервер возвращает D НСР-пакет, со­
держащий знач е н ия РХЕ-параметров (имя загрузочного сервера плюс имя загрузочного
файла) . Клиент получает от сервера свой загрузочн ы й файл по п ротоколу TFTP ( воз­
можно использование м ногоадресной верси и этого протокола) , после чего запускает его.
П роцедура загрузки РХЕ проиллюстрирована на рис. 6. 1 .
Запрос DHCP (включает параметры PXE)
Ответ DHCP (указывает на сервер загрузки TFTP)
Запрос загрузочного образа с помощью TFTP
Обработка загрузочного образа и конфигурации
Клиент сетевой
загрузки
Инсталляция образа инсталляции
с помощью НТТР/NFS/другие
Сервер сетевой
загрузки
Обработка файлов инсталляции
Рис. 6. /. Процесс загрузки и инсталляции РХЕ
D H C P, TFTP и файловые серверы могут быть распол ожен ы на раз н ы х хостах.
Загрузочн ы й файл , предоставл е н н ы й TFTP, содержит меню с указателями на доступ­
ные загрузочн ы е образы операционной с исте м ы , которые затем могут быть извлечены
с файлового сервера с помощью НТТР, FТР, N FS или другого сетевого протокола.
Загрузка РХЕ чаще все го используется в сочетани и с и нструментами автоматической
установки , такими как утилита kickstart в системе Red Hat или с истема предваритель­
ной и нсталляции Deblan, описанные в следующих разделах. Можно также использовать
РХЕ дnя загрузки бездисковых систе м , таких как тон кие клиенты .
Сервер СоЬЫег, рассматриваемый н иже , содержит средства, которые упрощают сете­
вую загрузку. Тем не менее вам все же понадобятся знания рабочих и нструментов, кото­
рые лежат в основе СоЬЫеr, начиная с РХЕ.
Настройка РХ Е
Наиболее ш ироко используемой с истемой загрузки РХЕ является PX E L I N UX, авто­
ром которой является П итер Авли н ( Н . Peter Anvin) . Она я вляется частью набора загру­
зоч ных устройств SYS L I N UX для каждого случая. Ее можно найти на сайте s y s l i n u x .
o rg . Друг и м вариантом является с истема i PX E ( i pxe . o r g ) , поддерживающая дополни­
тельные режим ы начал ьной загрузки , включая поддержку беспроводных сетей.
Часть 1. Основы администрирования
1 90
Система PXE L IN UX содержит загрузочный файл , которы й инсталл ируется в каталог
tftpboot сервера ТFТР. П ерсональн ы й компьютер загружает загрузочн ы й файл и е го
конфигурацию с сервера; конфигурация определяет, какое ядро необходимо испол ьзо­
вать. Эrа це почка событий может быть выполнена без вашего вмешател ьства; как вари ­
ант, можно создать специал ьное м е н ю загрузки .
W Допол н и тел ь н у ю и н ф о р м а ц и ю о с е р в е р е п р о г р а м м н о г о о б е с п е ч е н и я D H C P
с м . в разделе 1 7. З .
PXE L I N UX использует дл я своих загрузок РХЕ API и поэтому не зависит о т аппарат­
ной части в течение всего процесса загрузки. Более того , она может загружать не тол ь­
ко Linux, но и другие операционные систе м ы . С помощью систем ы PXELIN UX можно
инсталлировать с истем ы FreeBSD и другие операционные систе м ы , вкл ючая Wi ndows.
На стороне сервера лучше всего использовать D Н С Р-сервер организации ISC ( lntemet
Systems Consortium ) . В качестве альтер нативы можно испол ьзовать Dnsmasq ( g o o . g 1 /
FN k 7 a), упрощен н ы й сервер, поддерживающий DNS, D H C P и сетевую загрузку.
Исп ол ьзование Kickstart
а втоматизированного
инсталлятора Red Hat и CentOS
-
RHEL
Кickstart
-
это утилита, предназнач е нная для автоматической инсталляции
програм м н ого обесп е че н ия Red Hat. О н а представляет собой сценар н ы й
и нтерфейс к стандартному и н сталлятору Red Hat - программе Anaconda и зависит как от верси и дистрибутива, так и от имеющихся пакетов R P M .
Утилита Кickstart достаточно гибкая и автоматически распознает аппарат­
ное обеспечение систе м ы , поэтому она может одинаково хорошо работать
как на реальных, так и на виртуальных машинах. И нсталляцию с помощью
утилиты Кisckstart можно осуществлять с оптического носителя , локального
жесткого диска, а также серверов NFS, FТР и НТТР.
Создание файла конф игурации для утилиты Kickstart
Работа утил иты
Kickstart контрол и руется конфи гурацион н ы м файл о м , которы й
обычно называется k s . cfg. Формат этого файла довол ьно прост. Для тех, кто н е лю­
бит работать с текстовым и файлами , существует графическая утилита system-config­
kickstart, упрощающая настройку конфигурацион ного файла.
Конфигурационный файл утил иты Кickstart состоит из трех упорядоче н н ых часте й .
Первая из них - это раздел команд, где задаются такие установки , к а к я з ы к , расклад­
ка клавиатуры и часовой пояс . Здесь же с помощью параметра url задается источ н и к ,
из которого загружается дистр ибут и в ( в показа н н о м н иже п р и м е р е это компьютер
install server ) .
Рассмотрим при мер закончен ного раздела команд.
text
l a n g e n_US
l a n g s upp o r t e n US
ke ybo a r d u s
t i rne z on e - - u t c Arne r i c a / E S T
# l a n g используе тся при инсталляции . . .
#
.
.
.
а l a n gs uppo r t - на э та пе выполнения
# Используе тся американская ра складка
# - - u t c озна ча е т , что а ппара тный таймер
# на строен по Гринвичу
rno u s e
rootpw - - i s c r yp t e d $ 6 $ N a C 1 $ X 5 j Rl RE y 9 DqNTCX j Hp 0 7 5 /
Глава 6. Инсталляция и управление программным обеспечением
1 91
reboot
# Перез а гр узка после инс талляции . Рекомендуем .
boo t l oa d e r - - l o c a t i on=mЬ r
MBR
# За груз чик по умолча нию
install
# Инс та лля ция н о в о й системы, не модифика ция
u r l - - u r l h t tp : / / i n s t a l l s e rve r / r e d h a t
c l e a rp a r t - - a l l - - i n i t l a b e l
# Очис тка в сех суще с твующих ра зделов
p a r t / - - f s t yp e е х t З - - s i z e 4 0 9 6
p a r t swap - - s i z e 1 0 2 4
p a r t /va r - - f s t ype е х t З - s i z e 1 - - g r ow
n e t wo r k - -b o o t p r o t o dhcp
-
auth - - u s e s hadow - - e n aЫ emd5
f i r e wa l l - - di s aЫ e d
x c on f i g - - de f a u l tde s k t op=GNOME - - s t a r t x onboot - - r e s o l u t i on 1 2 8 0 х 1 0 2 4
- -depth 2 4
П о умолчанию утилита Кickstart работает в графическом режи м е , что препятствует
ее автоматическому запуску. Ключевое слово t e x t в н а ч ал е файла исправл яет дан н ую
ситуацию.
Параметр r o o t pw задает пароль суперпользователя на новом ком пьютере . По умол ­
чани ю пароль указывается в текстовом в иде , что созда ет проблему с точ ки зрения без­
опасности . Всегда пол ьзуйтесь опцией - - i s c r y p t e d , чтобы задать заш и фрован н ы й
пароль. Для того чтобы заш ифровать пароль, следует использовать команду opens s l
pas swd - 1 . Этот параметр устанавливает н а всех ваших системах один и тот же пароль.
Для того чтобы изменить пароль на этапе сборки , следует в ы п ол н ить процесс после за ­
грузки .
Директивы c l e a r p a r t и p a r t задают с п исок разделов с указанием их размеров.
С помощью о п ц и и - - g r o w м ожно отвести всю ос тавш уюс я область жесткого дис­
ка под один из разделов. Так можно облегч ить подгонку с истем с р а з н ы м и р азме р ами
жестких дисков. Такие усовершенствованные о п ции разбиения на разделы , как исполь­
зование менеджера логических томов ( Logica\ Yolume M anager
LVM ) , подде р жива­
ются утил итой Кickstart , но не инструментом sys tem-oonfig-kiokstart. О бр атите с ь
к встроенной в систему Red Hat оперативно-доступной докуме нтации за пол н ы м с п и ­
ском параметров форматирования дисков.
Во втором разделе файла приведен с п исок инсталли руемых пакетов, начинающи й ­
ся с директивы % pa c ka g e s . В списке могут быть у казан ы отдельные пакеты , колл е кци и
(например , @ GNOME ) либо запись @ E v e r y t h i n g , обозначающая весь имеющи й ся на­
бор пакетов. В первом случае задается л и ш ь имя пакета б ез номера верси и и расш ире­
ния . rpm. Приведем пример.
-
,
%pac kage s
@ N e t wo r ked W o r k s t a t i on
@ Х Wi ndow S y s tem
@ GNOME
myl o c a l p a c k a g e
В третьем разделе конфигурационного файла указ ы ва етс я п роизвольны й наб ор ко­
манд и нтерпретатора, которые подлежат выпол н е н и ю утилито й Кickstart. Существует
два возможных набора команд. Один из них начинается с ди р ективы % p re и содержит
команды, выполняемые перед началом и нсталляции. Команды, вы п олн я емые по завер­
шении и нсталляции, помечаются директивой % p o s t . В обоих случаях возможности си­
сте м ы по распознаван и ю и м е н компьютеров ограничен ы , та к что луч ш е поль зо в ат ьс я
I Р-адресам и . Кроме того, команды второго набора в ы п олня ютс я в среде ohrooted, по­
этому они не имеют доступа к инсталляционному нос ителю.
1 92
Часть 1. Основы администрирования
Файл ks . cfg довол ьно легко создавать п рограмм но. Один из вариантов - исполь­
зовать библиотеку Pykickstart Python , которая может ч итать и писать конфигурации ути ­
литы Кickstart .
Например, предположим, что вы хотели установить разные наборы пакетов н а серве­
рах и клиентах, и у вас также есть два отдельных физических местоположения , которые
требуют немного разных настрое к. В ы можете испол ьзовать библиотеку p y k i c k s t a r t
дл я написан ия сценария, которы й преобразует главн ы й набор параметров в набор и з че­
тырех отдел ьных файлов конфигураци и , оди н для серверов и оди н для клиентов в каж­
дом офисе.
Изменение дополнения к пакетам может быть просто вопросом изменения основно­
го файла конфигураци и , а не изменения всех возможных файлов конфигурации. Могут
б ыть даже случаи , когда вам нужно создавать и ндивидуальные файл ы конфигурации
для определ е н н ых хостов. В этой ситуации в ы , конечно, хотите , чтобы окончательные
файл ы ks . cfg автоматически генерировались.
Создание сервера Кickstart
Утилита Кickstart ожидает, что ее инсталляцион ные файлы расположены так же, как
и на и нсталляционном компакт-диске. На сервере ее пакеты должн ы находиться в ката­
логе RedНat/RPМS . Если и нсталл я ция выполняется по сети с помощью протоколов FТР,
N FS ил и НТТР, можно л ибо скопировать содержимое дистрибутива (оставив дерево н е ­
измен н ы м ) , л и б о просто использовать образы дистрибутивов I SO. Кром е того, в библи­
отеку можно добавлять свои собствен н ы е пакеты. Однако есть ряд нюансов, о которых
следует помн ить.
Получив команду и нсталлировать все пакеты (запись @ Eve r y t h i n g в разделе паке­
тов файла ks . cfg), утилита сначала устанавли вает базовые пакеты, а затем - пользова­
тельские, причем в алфавитном порядке. Если какой-то пользовательский пакет зависит
от других пакетов, н е входящих в базовый набор, назовите его наподобие zzmypackage .
rpm, чтобы он инсталлировался последни м .
Если не требуется и нсталл и ровать все пакеты , укажите нужн ые в разделе % pa c ka g e s
файла ks . cfg л ибо добавьте и х в одну или несколько коллекци й . Коллекции обознача­
ются записям и вида @ GNOME и представляют собой предопределенные наборы пакетов,
ком поненты которых перечислены в файле RedНat/base/ comps на сервере. К сожале­
нию, форм ат этого файла плохо докуме нтирова н . Коллекции задаются в строках, ко­
торые начинаются с цифры О или 1 ; един и ца указывает н а то , что коллекция выбрана
по умолчанию.
В принципе, м енять стандартны е коллекции нежелател ьно. М ы рекомендуем оста­
вить их в том виде , в котором они определены в с истеме Red H at , и указывать дополни­
тел ьн ые пакеты непосредственно в файле ks . cfg.
W Дополнительную информацию о РХЕ см. в разделе " Н астройка РХЕ".
Задание пользовательскоzо конфиzурационноzо файла
После создания конфигурационного файла необходимо заставить утилиту Кickstart
использовать е го. Это можно сделать нескольки м и способами. Официальный способ загрузиться с внешнего носителя ( U S B и DVD) и запросить инсталляцию Кickstart , вве­
дя linux ks в начал ьной строке п ри глашен ия boot : . Кроме того, можно использовать
загрузку РХЕ.
глава 6. инсталляция и управление программным обеспечением
1 93
Есл и не указать допол н ительн ых аргументов, система определ ит с вой сетевой адрес
по протоколу D H C P. Затем она узнает имя загрузочного D Н С Р-сервера и загрузоч ного
файла, попытается смонтировать серверный каталог через N FS и установит загрузоч н ы й
файл в качестве конфигурацион ного. При отсутствии сведе ний о загрузочном файле си­
стема будет искать файл /kicks tart/ I Р_ адрес_ xocтa -kickstart.
Другой способ задан и я кон ф и гурацион ного файла закл ючается в указа н и и пут и
к нему в виде аргумента о п ц и и inst . ks . 1 Здесь есть несколько возможн ых вариантов.
Команда
boo t : linux ks=http : cep в ep : /path
заставляет утилиту Кickstart загрузить конфи гурацио н н ы й файл по протоколу Н ТТ Р,
а не ч ерез N FS .
Для того чтобы вообще не использовать загрузочн ы й носитель, в а м нужно научиться
работать с протоколом РХ Е . Подробно о нем речь шла в начале этой главы .
А втоматизирован ная и нсталляция систем Deblan и U buntu
И нсталлятор систем Deblan и Ubuntu deЬian- � nstal ler рекомендуется ис­
пользовать в качестве варианта предварительнои автоматизированной инсталляции системы Ubuntu. Как и в случае Кickstart в системе Red Hat , файл пред­
варительной конфигурации отвечает на вопросы, задаваемые и нсталлятором.
Все интерактив н ые части и нсталлятора Deblan испол ьзуют утил иту deЬconf , что­
бы решить, какие вопросы нужно ставить и какие ответы испол ьзовать по умолчан ию.
Предоставив утилите debconf базу дан н ых с заранее сформул ирова н н ы м и вопросами ,
вы можете пол ностью автоматизировать работу и нсталлятора . Вы можете или сгенери­
ровать базу дан н ых вруч ную (она представляет собой обыч н ы й текстовый файл ) , или
выполн ить интерактивную и нсталляцию на тестовой с истеме, а затем передать свои от­
веты утил ите debconf с помощью следующих команд.
$ sudo deЬconf- qet- selections - - in s taller > preseed . cf q
$ sudo deЬconf- qet- selections >> preseed . cfq
Создайте конфигурацион н ы й файл , которы й будет доступен по сети , и передайте е го
в ядро во время и нсталляции с помощью следующего аргумента ядра.
р r е s е е d / u r l = h t t р : / / хо с т/ путь / к/файл_ предваритель ной_инсталляции
Синаксис файла предварительной инсталляци и , обычно именуе мого preseed . cfg,
довол ьно прост и во м н огом сходен с файлом ks . cfg в системе Red H at . Следующий
пример представлен в сокращен ном виде .
d-i
d-i
d-i
d-i
d-i
d-i
d e b i a n - i n s t a l l e r / l o c a l e s t r i n g e n_us
c o ns o l e - s e t up / a s k_ de t e c t b o o l e a n f a l s e
c o n s o l e - s e tup / l a y o u t c ode s t r i n g u s
n e t c f g / ch o o s e _i n t e r f a c e s e l e c t a u t o
ne t c f g / g e t_h o s t name s t r i n g u n a s s i gn e d - h o s t n ame
n e t c f g / g e t _doma i n s t r i ng una s s i gned- doma i n
d - i p a r tman - a u t o / di s k s t r i n g / dev / s da
d-i p a r tman - a u t o /me thod s t r i n g l vm
d - i p a r tman - a u t o / ch o o s e_r e c i p e s e l e c t a t omi c
1До поя вnения систем ы RH E L 7 этот параметр назывался ks . В настоя щее время используются оба
варианта названия, но в будущем от имени ks будут постепенно отказы ваться .
1 94
Часть 1. Основы администрирования
d - i p a s s w d / u s e r - f u l l n ame s t r i n g Da f f y D u c k
d - i p a s s wd / u s e rname s t r i ng ddu c k
d- i p a s s wd / u s e r - p a s s w o r d - c r yp t e d p a s s w o r d $ 6 $ /mkq9 / $ G / / i б tN .
x 6 6 7 0 . 9 5 1VSM/
d - i u s e r - s e t up / e n c r yp t - home boolean f a l s e
t a s k s e l t a s k s e l / f i r s t mul t i s e l e c t ubun t u - d e s k t op
d - i g r u b - i n s t a l l e r / o n l y_de Ь i a n boo l e an t ru e
d - i g r ub - i n s t a l l e r / w i t h_o t h e r _ o s b o o l e a n t rue
d- i f i n i s h - i n s t a l l / reboot_in_p r o g r e s s note
x s e r ve r - x o r g x s e rv e r - x o r g / a u t ode t e ct_mon i t o r boolean t r ue
Ряд опций в этом л истин ге просто запрещают диалоги , которые обычно требуют вза­
имодействи я с пользователем. Например, опция c on s o l e - s e t up / a s k_de t e c t запреща­
ет выбор раскладки клавиатуры.
Такая кон ф и гурация старается идентифицировать сетевой и н те рфе й с , котор ы й
в действительности подкл юче н к сети ( c h o o s e i n t e r fa c e s e l e c t a u t o ) и получает
сетевую и нформацию через п ротокол динам ического конфигурирования хоста D H C P.
П редполагается , что значе ния систе много и м ен и хоста и домена предоставля ются про­
токолом D H C P и не переопределяются .
При выпол н е н и и " предварител ьной " и нсталл я ц и и нел ьзя испол ьзовать существу­
ющие раздел ы диска: в этом случае л ибо задействуется существующее с вободное про­
странство, либо выполняется перераспределение всего диска. Наличие строк p a rtman *
свидетел ьствует о том , что для сегментирован ия дисковой памяти испол ьзуется пакет
p a r: t ma n - a u t o . Если система и меет несколько дисков, то для и нсталляции вы должны
указать нужн ый диск. В противном случае (т. е . дл я единствен ного диска) испол ьзуется
значение /dev/ sda.
П редлагается несколько " рецептов" сегментирован ия дисковой памяти:
•
вариант a t om i c поме щает все с исте м н ые файл ы в оди н раздел ;
•
вариант h ome создает отдельн ый раздел для каталога /home;
•
вариант mu l t i создает отдельные разделы для каталогов /home, /usr, /var и /t.mp.
П рофил и пол ьзователей можно создавать посредством ряда директив p a s s w d . Ка к
в случае конфигурации Кickstart, м ы настоятельно рекомендуем использование зашифро­
ван н ых (хешированных) паролей . Файлы предварительной инсталл я ц и и часто хранятся
на НТТР-серверах и могут быть обнаружены л юбопытн ыми пользователями. ( Безусловно,
хеш ированный пароль постоянно является объектом дл я грубых силовых атак. )
О п ц и я выбора задач и ( t a s k s e l ) позволяет указать тип подл ежащей и нсталл я ­
u и и Ubuntu-c иcтe м ы из предложен н ых вариантов: s t a nd a r d , u b u n t u - d e s k t o p , d n s ­
s e :::· v e r , l amp- s e rv e r , kubun t u - de s k t o p , edubun t u - d e s k t o p и x u b u n t u - d e s k t o p .
П редставл е н н ы й выше при мер файла предварител ьной и нсталля ц и и взят из доку­
ме нтации по и нсталляции системы Ubuntu, доступной по адресу: h e l p . u b u n t u . com.
Руководство содержит полную документацию по синтаксису и применению файла пред­
варител ьной и нсталляции.
Несмотря на то что происхожден ие системы Ubuntu не связано с " родословной " Red
Hat, на ее собственный базовый и нсталлятор ''привита" совместимость с управляющи м и
фа йлами Kickstart . Кроме того , Ubuntu вкл ючает утилиту sys tem- config-kickstart
для создания этих файлов. В инсталляторе Kickstart дл я с истемы Ubuntu опускается ряд
Глава 6. Инсталляция и управление п рограммным обеспечением
1 95
важных фун кци й . которые поддерживаются Red Н аt-инсталлятором Anaconda (напри­
мер, LVM и конфигурация брандмауэра). Если у вас нет веской при ч и н ы для выбора
Кickstart , мы все же рекомендуем использовать инсталлятор Deblan.
Сет евая з агрузка с помо щь ю СоЬЫеr, сервера
инициализации Lin иx с от крытым исходным кодом
На сегодня ш н и й ден ь сам ым п ростым способом сетевой загрузки я вляется исполь­
зование сервера СоЬЫеr - проекта, первоначально написан ного М а й клом де Хааном
( M ichael D e H aan). плодовитым разработч и ком программ ного обеспечения с открытым
исходным кодом . СоЬЫеr улучшает утилиту kickstart, устраняя н е которые из ее са­
мых утом ител ьн ых и повторяющихся адм инистративных элементов. О н объеди няет все
важные фун кции сетевой загрузки , вкл ючая D H C P, DNS и ТFГР, и помогает управлять
образами операционной систе м ы , испол ьзуе м ы м и для создания физических и вирту­
альных маш и н . Сервер СоЬЫеr вкл ючает в себя командн ые строки и веб- и нтерфейсы
для администрирования.
Шаблон ы - это, пожалуй , самая и нтересная и полезная фун кция сервера СоЬЫеr.
Вам ч асто понадобятся разн ые настройки быстрой и п редварительной и нсталля ц и и
для разных профилей хоста. Например, у вас могут быть веб-серверы в двух центрах об­
работки данн ых, которые. помимо сетевых параметров, требуют одинаковой конфигура­
ции. Вы можете испол ьзовать фрагменты СоЬЫеr для обмена раздела м и конфигурации
между двумя типами хостов.
Фрагмент (snippet) - это всего лишь набор команд оболочки. Например, следующий
фрагмент добавляет открытый кл юч к авторизованным кл ючам SSH для пол ьзователя
root:
rnkd i r - р - -rnode= 7 0 0 / r oot / . s s h
c a t > > / ro o t / . s s h / au t h o r i z e d_ke y s < < EOF
s s h - r s a AAAAB 3 N z a C l y c 2 EAAAADAQABAAABAQDK E r zVda rN k L 4 b zA Z o t S z U /
. . . Rooy2 R 6 T C z c 1 B t / oqUK 1 Rl kuV
EOF
chrnod 6 0 0 / r o o t / . s s h / a u t h o r i z e d_ke y s
В ы сохраняете фрагмент кода в каталоге фрагментов СоЬЫе r, а зате м ссылаетесь
на него в шаблоне быстрой инсталл я ц и и . Например, если вы сохра н ил и фрагмент. по­
казанный выше, как root_yuЬkey_ snippet. то можете ссылаться на него в шаблоне
следующим образо м .
%post
S N I P P E T : : r o ot_pub ke y_sn i p p e t
$ ki c k s t a r t_done
Испол ьзуйте шаблоны СоЬЫеr для н астрой к и разделов диска. условной установки
пакетов, настройки часовых поясов, добавления пол ьзовательских репозиториев паке ­
тов и выполнения л юбых других требований к локализации.
СоЬЫеr также может создавать новые виртуальные маш и н ы под разл и ч н ы м и гипер­
визорами. Он может интегрироваться с системой управления конфигурацией для предо­
ставления машин после их загрузки.
Пакеты СоЬЫеr доступ н ы в стандартн ых хран ил ищах для наших образцов дистри ­
бутивов Linux. Вы также можете получ ить пакеты и документацию из проекта СоЬЫеr
G it H ub на сайте соЬЫ е r . gi t hub . i o .
Часть 1. Основы администриРования
1 96
А втоматизированная инсталляция системы FreeBSD
Утилита bsdinstall в системе Free B S D я вляется текстовым и нсталлятором , кото­
рый запускается при загрузке ком п ьютера с установоч ного компакт-диска или DVD ­
диска Free B S D . Ее средства автом атизации руди ме нтарн ы по сра в не н и ю с быстрой
инсталл яцией Red Hat ил и предварительной инсталл я цией Deblan, а документация огра­
н ичена. Луч ш и м источ ником информации я вляется справоч ная стран ица bsdins tall .
Создание н астраиваемого , н е привлекающего к себе в н и мание инсталля цион ного
образа - утом ител ьное дело, которое включает в себя следующие этап ы .
l . Загрузка последней версии I SO (образа компакт-диска) с сайта ftp . freeЬsd . org.
2. Распаковка образа I S O в локальный каталог.
3. Внесение необходим ых изменений в клонированный каталог.
4. Создание нового образа I SO из вашей индивидуальной ком поновки и запись его
на носители или создание загрузочного образа РХЕ дпя сетевой загрузки .
Версия системы Free B S D в архиве tar пон имает формат I SO в допол нение ко м но­
гим другим форматам , поэтому вы можете просто извлечь файл ы образа ком пакт-диска
в пустой каталог. Создайте подкаталог перед извлечением , потому что файл I SO распа­
ковывается в текущи й каталог.
f r e e b s d $ sudo mkdir FreeBSD
f r e e b s d $ sudo tar xpCf FreeBSD FreeBSD- 11 . 0 . iso
П осле того как вы извлекли содержи мое образа, вы можете настроить их, чтобы ото­
бразить н ужн ые параметры установк и . Н апример, вы можете добавить собстве н н ы е
D N S-резол ве р ы , отредактировав файл FreeBSD / e tc / resolv . conf , чтобы вкл ючить
в него свои собствен н ые серверы имен.
Обычно программа bsdins ta l l требует от пол ьзователе й в ы бора таких параме­
тров, как тип используе мого те рминала, сопоставление клавиатуры и н ужный стил ь
разбиения диска. Вы можете обойти и нтерактивные вопрос ы , поместив файл с именем
ins tallerconfig в каталог etc образа системы.
Формат этого файла оп исан на стран ице руководства bsdins tall . О н имеет два раздела.
•
П реамбула, которая устанавл ивает определенные параметры установки .
•
Сценарий оболочки , который выполняется после завершения установки.
Мы отсылаем вас к странице руководства, вместо того чтобы излагать ее содержание.
Среди других настроек она содержит опции дпя непосредствен ного подключен ия к кор­
ню Z FS и к другим настраи ваем ы м схемам разбиения.
Как тол ько ваш и настройки будут выполн е н ы , вы можете создать новый файл I S O
с помощью команды mki sofs . Создайте образ Р Х Е ил и зап и ш ите I SO на оптический
носитель дпя автоматической установки .
П роект mfsBS D (mf s b s d . vx . s k) представляет собой набор сценарие в , котор ые ге ­
нерируют РХЕ-совместим ы й образ I SO. Базовый образ Free B S D 1 1 зани мает не менее
47 М и Б. Исходный текст сценариев см. по адресу g i t h u b . c om/mma t u s ka /mf s b s d .
6.2. УПРАВЛЕНИЕ ПАКЕТАМИ
П рограмм ное обеспечен ие систем U N IX и Linux (исходн ые коды , файл ы сборки , до­
кументация и шаблоны конфигурации) традицион но расп ространял ись в виде сжатых
Глава 6. Инсталляция и управление программным обеспечением
1 97
архивов ( . tar . gz ил и tgz) . Для разработчи ков это удобно, но для пользователей и ад­
м и н истраторов создает сложности. Содержи мое этих архивов нужно было ком п ил иро­
вать и собирать для каждой с исте м ы и каждой верс и и . Это утом ительный и уязвимый
для ошибок процесс.
Со врем ен ем появились с истем ы управлен и я пакетам и , упрощающие и облегчаю­
щие работу по управлению п рограмм н ы м обеспечением . П акеты в ключают все файлы ,
необходимые для запуска части п рограм м ного обеспечен ия , включая предварительно
скомпил ированные двои ч н ые файл ы , и нформацию о зависимостях и шаблон ы конфи­
гурационных файлов, которые могут быть настроен ы адм и н истраторами . Возможно, са­
мое главное, что систе м ы упаковки п ытаются сделать процесс установки макси мально
атомарн ы м . Если во время установки возникает ошибка, пакет может быть отменен или
загружен повторно. Новые верс и и программного обеспечения могут быть установлены
с помощью п ростого обновления пакета.
Установщики пакетов обычно ос ведомлены о файлах конфигурации и, как правило ,
не перезаписывают локальные н астройк и , сделан ные с истемным адми нистратором . Они
либо создают резервные копи и существующих файлов конфигурации , которые меняют,
либо предоставляют примеры файлов конфигурации под другим именем. Если вы обна­
ружите, что недавно установленный п акет испортил что-то в вашей системе, в ы м ожете
теоретически вернуть е го обратно, чтобы восстановить свою систему в исходное состоя­
ние. Конечно, теори я отличается от практики , поэтому не п ытайтесь это делать на про­
изводстве нной системе, предварительно не проверив.
Систе м ы управления пакета м и определяют модель зависимосте й , которая позволяет
разработчи кам пакетов обеспечивать правильную установку библиотек и инфраструкту­
ры поддержк и , от которых зав исят их приложения. К сожал е н и ю , графики зависи мо­
стей иногда несоверш е н н ы . В случае неудачи адми н истраторы могут оказаться в слож­
ной с итуац и и , когда невозможно обновить пакет из-за н есовместимости верси й между
его зависимостям и . К счастью, последние верс и и программного обеспечения для управ­
ления пакетами , по-видимому, менее восприимчивы к этому эффекту.
В ходе установки пакеты могут запускать сценарии в разные моменты времени, по­
этому они могут делать гораздо больше, чем просто выгружать новые файл ы . Пакеты ча­
сто добавляют новых пол ьзователей и групп ы , запус кают проверки работоспособности
и настраи вают параметры в соответствии с окружающей средой.
К сожалению, верс и и пакетов не всегда соответствуют версиям програм много обе ­
спечен и я , которое о н и устанавл ивают. Например, рассмотрим следующи й пакет R P M
дл я приложения docker-engine:
.
$ rpm qa 1 qrep - i docker
docke r - e n g i n e - 1 . 1 3 . 0 - l . e 1 7 . c e n t o s . x 8 6 6 4
$ docker version 1 qrep Version
Ve r s i on : 1 . 1 3 . 1
-
Сам пакет объявляет верси ю 1 . 1 3 .0, но двоичные отчеты де мона docker сообщают
о верс и и l . 1 3 . l . В этом случае специалисты , поддерживающие распространение дистри­
бутивов, учитывают изменения и увел ичивают версию младшего пакета. Име йте в виду,
что строка верси и пакета не обязательно является точ н ы м указанием верси и программ­
ного обеспечен ия , которая фактически установлена.
Вы можете создавать пакеты для облегчения распростран е н ия ваш и х собствен ны х
локали заций или п рограмм ного обеспечени я. Например, вы можете создать пакет, ко­
торый при инсталляции считывает информацию о локал изации для маши н ы (или полу-
1 98
Часть 1. Основы администрирования
чает ее из центральной базы данн ых) и использует эту информацию для настройки ло­
кал ьных файлов конфигурации .
Вы также можете связывать локал ьные приложения в пакеты ( в ком плекте с зави­
симостя м и ) или создавать пакеты мя сторон них приложе н и й , которые обычно не рас­
пространяются в формате пакета. Вы можете обновлять с вои пакеты и испол ьзовать ме­
ханизм зависимостей для автоматического обновления ком пьютеров при выпуске новой
версии пакета локализации. Мы рекомендуем испол ьзовать программу fpm, Effing Package
Manager, которая является самы м простым способом начать сбор пакетов для нескольких
платформ. Вы можете найти ее на сайте g i t hub . com/ j o rdans i s s e l / fpm.
Вы также м ожете испол ьзовать механизм завис и м ости для создания групп паке­
тов. Например, вы можете создать пакет, который не устанавливает ничего, но зависит
от многих других пакетов. Установка пакета с включе н н ы м и зависимостя м и приводит
к тому, что все пакеты будут установлены за оди н шаг.
6.3. СИСТЕМЫ УПРАВЛЕНИЯ ПАКЕТАМИ ДЛЯ LINUX
В системах Linux ш ироко распространены два формата пакетов. В системах Red Hat .
CentOS, S U S E и Amazon Linux, а также в большинстве других дистрибутивов применя­
ется дисп етчер пакетов RPM ( Red H at Package Manager). В с истемах Deblan и UЬuntu ис­
пол ьзуются пакеты отдельного формата . dеЬ. Оба формата функционально иденти ч н ы .
Систе м ы упаковки R P M и . d e b теперь работают в виде двухуровневых средств
управления конфигурацией. Н а н ижнем уровне находятся средства , которые и нсталли­
руют, деинсталли руют и запрашивают пакеты: rpm. для RPM и dpkg для . dеЬ.
Н ад этим и команда м и находятся с исте м ы , которые знают, как н ужно производить
поиск пакетов в И нтернете , анализировать зависи мости между пакетам и и модернизи­
ровать все пакеты в системе. Система yum (Yellowdog Updater, Modified) работает с систе­
мой R P M . Система Advanced Package Tool (АРТ) первоначально была создана для рабо­
ты с пакетами . dеЬ, а сейчас она может работать также с пакетами RPM .
На следующих двух страницах м ы рассмотрим команды н изкого уровня rpm. и dpkg.
В разделе 6.4 м ы обсудим комплекс н ые с исте м ы обновления А РТ и yum, которые ос­
новываются на этих низкоуровневых объектах. Ваш и ежедневные действия по адм ини­
стрированию обычно включают инструменты высокого уровн я , но вам иногда п рихо­
дится пробираться в глубокие дебри rpm. и dpkg.
Ком а нда rpm: уп равлен ие пакетами RPM
RHEL
Команда rpm и нсталл ирует, проверяет и запра ш ивает состоя н и е пакетов.
Когда-то она еще и создавала пакеты , однако сейчас эта фун кция отведена
команде rplllЬu i ld. Тем не менее опции rpm по-прежнему имеют сложн ые
взаимодействия и вместе могут испол ьзоваться только в некоторых комби­
нациях. Воспринимать утилиту rpm нужно так, будто это нескол ько разных
команд с одни м и тем же именем.
-
Режим , который вы выбираете для работы rpm (например, - i ил и q) определяет,
к каким фун кциям этой утилиты вы хотите обратиться . Команда rpm --help перечис­
лит все опции , разбивая их по режимам. Если вам часто приходится и меть дело с паке­
там и RPM, н ужно будет внимател ьно прочесть главную страницу.
,
Глава 6. Инсталляция и управление программным обеспечением
1 99
Обыч но испол ьзуются опции - i ( instal l ) , - u (upgrade) , - е ( e rase) и - q (query) .
Последняя опция я вляется довольно сложной в том плане, что она служит дпя включе­
ния остал ьных опций ; чтобы сформировать определенный запрос , вам нужно предоста­
вить допол н ител ьн ый флаг командной строки. Например, команда rpm -qa отображает
сп исок всех пакетов, и нсталл и рова н н ых в системе.
Расс мотр и м н ебол ьшой пример. П редположи м , требуется и н с талл ировать новую
версию пакета OpenSS H , поскольку появилось сообщен ие о том , что в предыдущей вер­
с и и выявлена бре ш ь. П осле того как пакет загружен на локальный ком пьютер, дпя его
инсталляции достаточно ввести команду rpm -u.
r e dh a t $ sudo rpm -U opens sh- 6 . 6 . lpl - 3 3 . el7 _2 . x8 6_6 4 . rpm
e r ro r : f a i l e d dependen c i e s :
ope n s s h = 6 . 6 . l p l - 2 3 i s n e e d e d Ьу ope n s s h - c l i e n t s - 6 . 6 . l p l - 2 3
op e n s s h = 6 . 6 . l p l - 2 3 i s n e e d e d Ь у ope n s s h - s e rve r - 6 . 6 . l p l - 2 3
Гм . . . Похоже , н е все так просто! Как видите , инсталлирован ная в настоящий момент
версия 6.6. 1 р 1 -23 с вязана с рядом других пакетов. Команда rpm не позволяет обновить
пакет OpenSSH до версии 6.6. l p \ - 3 3 , так как это изме н е н ие затрагивает другие пакеты.
Этот тип конфл икта встречается постоян но, поэтому приходится разрабаты вать такие
систе м ы , как АТР и ywn. В реал ьном мире мы вряд л и п ытались бы распутывать зависи­
мости вруч ную, однако в качестве примера сделаем это дпя утилиты rpm.
Можно прибегнуть к при нудител ьному обновл е н и ю с помощью опц и и - - fo rce ,
но это вряд л и оправданно. И нформация о зависимостях присутствует здес ь дЛЯ того,
чтобы сэкономить ваше вре мя и избавить вас от л и ш н их пробл е м , а не дпя того, чтоб ы
запутать вас . Для л юбого систе м ного адми н истратора нет н ичего хуже , чем наруше н и е
работы S S H в дистанцион ной систе ме:
redha t $ rpm -q --vhatrequires openssh
op e n s s h - s e rve r - 6 . 6 . l p l - 2 3 . e l 7_2 . x 8 6_ 6 4
opens s h - c l i e n t s - 6 . 6 . l p l - 2 3 . e l 7_2 . x 8 6_ 6 4
Те перь п редполож и м , ч то об н о вл е н н ые коп и и н еобходи м ы х п акетов пол уч е ­
н ы . М ожно и н сталл ировать и х последовател ьно, но кома нда rpm все берет на себ я .
Достаточно указать список пакетов в командной строке , и команда rpm отсортирует их
в соответствии с имеющимися зависимостя м и .
r e dh a t $ sudo rp m -U opens sh- *
redha t $ rpm -q opens sh
open s s h - 6 . 6 . l p l - 3 3 . e l 7 3
Круто! Похоже , это сработало. Обратите внимание: rpm понимает, о каком пакете м ы
говорим , даже есл и м ы не указали пол ное имя и л и версию пакета. ( К сожал е н и ю , rpm
не перезапускает оболочку s shd после установки. Вам нужно будет вручную перезагру­
зить ее, чтобы завершить обновление.)
Кома нда dpkq: управление пакетами . dеЬ
В систе ме Deblan аналогом команды rpm я вляется команда dpkg. К по­
лезн ы м ее опция м относятся - - instal l , - - remove , а - 1 переч исляет па­
кеты, инсталлирова н н ые в системе. Обратите внимание н а то, что команда dpkg - - instal l , выпол н е н ная в отношении пакета, уже находящегося
в системе, перед и нсталляцией удаляет предьщущую верси ю пакета.
часть 1. основы администрирования
200
С помощью команды dpkg -1 1 grep па к е т легко определить, инсталлирован ли
уже указанный пакет. Н апример, чтобы отыскать Н ТТ Р-сервер, выпол н ите следующую
команду.
1 qrep -i http
i i l i ght tpd l . 4 . 3 5 - 4 +d eb 8 u l amd 6 4
memo r y f o o t p r i n t
ubun t u $ dpkq - 1
f a s t web s e rve r w i t h minimal
В резул ьтате будет найдена программа lighttpd
облегченный веб-сервер с пре­
восходным открытым исходным кодом . Начальн ые буквы i i означают, что задан ная
программа уже инсталлирована.
Предполож и м , что группа, занимающаяся вопросами безопасности системы Ubuntu,
выпустила исправление к редактору nvi . После загрузки исправления нужно выполнить
команду dpkg для ее установки. И з показанного ниже примера видно, что эта команда
гораздо более м ногословна, чем rpm, и сообщает о том , что именно она делает.
-
ubun t u $ sudo dpk q - - install . /nvi_l . 8 1 . б - 1 2_amdб 4 . deЬ
( Re a d i n g d a t a b a s e . . . 2 4 3 6 8 f i l e s and d i r e ct o r i e s c u r r e n t l y i n s t a l l e d . )
P r e p a r i n g t o r e p l a c e nvi 1 . 7 9 - 1 4 ( u s i ng . / nvi_l . 8 1 . 6 - 1 2 _ amd 6 4 . de b )
Unp a c k i n g r e p l a cement nvi . . .
S e t t i ng up nvi ( 1 . 8 1 . 6 - 1 2 ) . . .
C h e c k i n g ava i l a Ы e ve r s i o n s o f е х , upda t i n g l i n k s in / e t c / a l t e rn a t ive s
( You та у modi f y t h e s yml i n k s t h e r e y o u r s e l f i f de s i re d - s e e ' man l n ' . )
L e a v i n g е х ( / u s r /b i n / e x ) p o i n t i n g to / u s r / b i n / n e x .
L e aving e x . 1 . g z ( / u s r / s h a r e /man /man l / e x . 1 . g z ) p o i n t i n g to / u s r / s h a r e /
ma n / ma n l / n e x . 1 . g z .
Теперь можно в вести команду dpkg - 1 , чтобы узнать, все л и прошло нормал ьно.
Флаг - 1 допус кает наличие шаблона поиска, благодаря чему можно получ ить и нформа­
цию только по редактору nvi .
ubun t u $ dpkq -1 nvi
Ve r s i o n
Name
1 . 8 1 . 6- 1 2
i i nvi
De s c r i p t i on
4 . 4 B S D r e - imp l eme n t a t i o n of vi .
Инсталляция заверш илась успешно.
6.4. ИСПОЛЬЗОВАНИЕ ВЫСОКОУРОВНЕВЫХ СИСТЕМ
УПРАВЛЕНИЯ ПАКЕТАМИ В СИСТЕМЕ LINUX
Систем ы управления пакетами, такие как А РТ и ywn , а также Red Hat Network, ставят перед собой следующие задачи :
•
упростить определение местонахождения и загрузку пакетов;
•
автоматизировать процесс обновления или модернизации систе м ;
•
способствовать управлению зависимостей между пакетами .
Оче видно, что, пом и м о команд, на стороне кл иентов эти с исте м ы должны выпол ­
нять множество других фун кци й . Все он и требуют, чтобы ком пан и и , обеспеч и вающие
поддержку дистрибутивов, организовывали свои предложен ия в согласованном поряд­
ке , чтобы клиенты могл и иметь осознан н ы й доступ к их программ ному обеспече н и ю.
Так как ни оди н поставщик не в состоянии предложить программы для Linux на лю­
бой вкус , каждая система допускает существование множества хранил и щ програм м ного
обеспечения. Хранил и ща могут быть локальными по отношению к ваш е й сети , поэтому
Глава 6. Инсталляция и управление программным обеспечением
201
эти систе м ы предлагают первоклассную базу, чтобы вы могл и создать собствен ную си­
стему внутреннего распределения.
RHEL
Служба Red Hat Network неразр ы вно с вязана с дистрибутивом Red H at
Enterprise Linux. Это ком мерческая служба, пользование которой стоит де­
нег, зато она обладает привлекател ьны м и нтерфейсом и более мощн ы м и
возможностям и в Шiане автоматизаци и , ч е м А РТ и yum . Служба Red Hat
Network - это улуч шенная открытая версия дорогостоящего сервера Satellite
Serve r. Клиент может ссылаться на хранил и ща yum и AP'f, и эта возможность
позволяет таким дистрибутива м , как CentOS, адаптировать клиентский гра­
фический и нтерфейс под нестандартное использование.
Система АРТ документирована гораздо лучше, чем Red Hat Network, и к тому же бес­
Шiатна. Она также является более гибкой в плане настройки. Система АРТ разрабатыва­
лась для системы Deblan и программ ного обеспечения dpkg, но была рас ш ирена и теперь
может работать с RPM . Доступн ы м и я вляются все версии, работающие со всем и наши ­
м и примерами дистрибутивов. На дан ный момент с истема АРТ более других подходит
на роль универсального стандарта для распространения программного обеспечения.
П рограмма yum
это аналог AP'f, предназнач е н н ы й для RPM. Она также я вляется
стандартн ы м адми нистратором пакетов для Red Hat Enterprise Linux и CentOS, хотя мо­
жет работать в л юбой с исте м е , ос нованной на RPM , при условии что вы сможете ука­
зать е й хранилища, и меющие соответствующи й фор мат.
М ы предпоч итаем А РТ, и считае м , что это разум н ы й в ы бор, есл и н ужно настро­
ить собстве н н ую автоматизирован ную сеть распредел е н ия пакетов. Более подробно
об этом можно прочитать в разделе " Создание локального зеркала хра н ил и ща " далее
в этой главе .
-
Х ра н ил и ща пакетов
Дистрибьюторы Linux поддерживают хран илища програ м м ного обеспечен и я , ко­
торые работают совместно с выбран н ы м и и м и с исте мам и управл е н и я па кета м и .
Конфигурация , выбираемая п о умолчан и ю дл я с истем ы управления пакетами, обычно
ссылается на оди н ил и нескол ько хорошо известн ых веб- или FТР-серверов, находя ­
щихся под управлением дистрибьюторов.
Однако из этого факта н ел ьзя сразу понять, что может содержаться в таких храни­
лищах. Должны ли они включать тол ько наборы пакетов, при нятых в качестве офици­
альных, основных, версий? Офи циал ьн ые верси и ШI ЮС текущие обновления с исте м ы
защиты? Современные версии всех пакетов, которые существовали в официальных вы­
пусках? Полезные программы сторонних производителей , которые официально не под­
держи ваются дистрибьютором? Исходный код? Бинарные файлы для м ногочисл е н н ых
архитектур аппаратных средств? Если вы запускаете apt upgrade или yum upgrade ,
чтобы обновить систему, что именно под эти м подразуме вается?
Вообще , системы управления пакетами должны отвечать на все эти вопросы и облег­
чать орган изациям выбор специфических профилей, которые они хотят вкл ючить в их
" м и р програ м м н ого обеспечения " . Следующие кон цепции помогут структурировать
этот процесс .
•
Выпус к ( release) - это самодостаточное отображение окружен и я пакета. Прежде
чем наступила эпоха И нтернета, именованные выпуски операционных систем бьши
более или менее постоя нными и бьши с вязаны с одни м определенным моментом
врем е н и ; исправле ния систе м ы создавал ись отдел ьно. В наши дни выпуск пред-
Часть 1. Основы администрирования
202
ставляет собой более рас пл ы вчатое понятие. Выпуски выходят во время обновления
пакетов. Н ек оторые выпуски, такие как Red Hat Enterprise Li nu x, предназначены
специально для тоrо, чтобы задержать выходы новых версий; по умолчан и ю в н их
включаются только обно н.л е н ия защиты . Остал ьн ые выпуски, такие как бета-вер­
си и, меняются часто и с ущественно. Однако во всех случаях выпуск я вляется базо­
вой л и н и е й , трендом , той м ерой, "до которой я хочу обновить свою систему" .
•
•
•
•
Ком поне нт (component) - подборка програм м в рам ках выпус ка. Дистрибутивы
и м е ют разл и ч н ы е отл и ч и я , однако общи м я вляется отл и ч и е м ежду ос нов н ы м
програм мным обеспеч е н ие м , предлагаем ы м дистрибьютором , и допол н ительным
програ м м н ы м обеспечением , предлагаем ы м энтузиастами . Другое отличие, при­
с ущ ее м иру Linux, кроется м ежду свободн ы м и частя м и открытого исходного кода
выпуска и ч астя м и , с вя зан н ы м и с н екоторым соглашением о коммерческом ис­
пользовании.
Отдел ьного в ниман ия со сторон ы адм инистратора заслуживают м и н и м ал ьно ак­
тив н ые ком поненты , которые в ключают только исправления в с истеме защиты .
Некоторые выпуски позволяют комбинировать компоне нт защиты с постоян н ы м
базовым компонентом для со здания относительно стабильной версии дистрибутива.
Арх ите ктура (arch itect u re) - это специфический класс аппаратных средств (обо­
рудован ия ) . П редпола гае тс я , что ком п ьютеры, относящиеся к некоторому классу
арх ите ктур ы , будут и меть оди н а ковые характеристи ки , позволяющие запускать
на н их одинаковые исп ол няем ые файл ы. Архитектуры являются специфическими
эк з е м пля р ам и выпусков ( например, " Ubuntu Karmic Коа\а for х86_64" ) . Так как
компоне нты являются подразделениями выпусков, для каждого из них существует
соответствующ и й экзе м пл я р , характерн ый для данной архитектуры .
И ндивидуал ьн ы е пакеты я вля ются элемента м и , составл я ю щ и м и ком поне нты ,
а сл едовательно , и в ы пус к и. П акеты обычно явля ются специфическим и для архи ­
тектуры и выходят в виде верс и и , не зависящей от главного вы пуска и остальных
паке то в . Соответствие между пакетами и выпусками я вляется неявным в том пла­
н е , как производится настрой ка сетевого хранили ща.
Су ще ствован и е ком поне нтов, которые не поддерживаются дистрибьютором (напри­
мер, universe и multiverse для системы Ubunt u ) , поднимает вопрос о том , как эти компо­
н енты относятся к ос новному вы пуску операционной систе м ы . Можно л и о них гово­
р ить как о настоящих ком понентах с пецифическоrо выпуска или же они представляют
собо й неч то др угое ?
С точк и зрен и я управл е н ия пакетами ответ прост: u niverse - это настоя щ и й ком ­
понент. О н и связа н ы со с п ец и ф и ческим выпуском и выходят вместе с н и м . Разделе н ие
управл е н ия и н тересно с точ ки зре ния адм и н истрирова н и я , но не вл ияет на систе м ы
управл е н и я пакетам и , за исключе н и е м с итуаци й , в котор ых адм и н истратор должен
вручную добавлять несколько хра н илищ.
Служба RHN: Red Hat Network
RHEL
П осле того как сис те м а Red Hat перестала входить в группу потребител ь­
с ки х товаров Li 11ux, Re d Hat Network стала платформой для управления си­
стемой дл я Red Hat Enterprise Linux. Подписываясь на нее, вы приобрета­
ете право доступа к Red H at N etwork. В п росте й ш е м виде служба Red Hat
N et work представл яет собой популярн ы й веб-портал и сп исок рассыл ки .
Глава 6. Инсталляция и управление программным обеспечением
203
В этом с м ысле она мало чем отл ичается от тех служб уведомл е н и я об ис­
правлениях, которые у:же м ного лет эксплуатируются различн ы м и постав­
щиками U N IХ-систем . Допол н ительн ые возможности откры ваются л и ш ь
п р и услови и , что вы готовы з а них заплатить. И н формацию и текущие рас ­
ценки можно узнать на сайте rhn . redhat . com.
Служба Red Hat N etwork предлагает веб-ориентированный и нтерфейс для загрузки
новых пакетов (можно также работать в режи ме командной строки ) . После того как вы
зарегистрируетесь, система будет получать все н еобходимые исправления в автоматиче­
ском режиме.
Недостатком такого подхода я вляется то, что реш е н ия об обновл е н и и систе м ы при­
н и маются за вас. Определ ите для себя , в какой степени следует доверять разработч икам
систем ы Red Hat (а также тех програ м м , которые они предлагают в виде пакетов).
Разумн ы м ком пром иссом будет выделение одного и з ком п ьютеров в качестве сер­
вера автоматических обновл е н и й . Периодически можно создавать образы серверной
систе м ы и проверять, в какой степени они подходят для внутреннего рас пространения.
А РТ: усовершенствова н ное средст во уп равления п а кета м и
А РТ (Advanced Packagi ng Тоо\) - это одна из зрелы х с истем управления пакетам и .
С помощью всего л и ш ь одной команды apt можно модернизировать в с ю систему и про­
грам м ное обеспече н и е , а также (с помощью Red H at N etwork) постоянно поддерживать
актуал ьны м и ваши версии без вмешательства со стороны человека.
П ервое правило, которого следует придерживаться при испол ьзован и и систем ы АРТ
в системе Ubuntu (это касается всех средств управле н ия пакетами этой систе м ы ) , требу­
ет игнорировать утилиту dselect, я вл яющуюся клиентской н адстрой кой систе м ы . Реч ь
не идет о том , что утил ита dselect плохая , п росто ее и нтерфейс неудачен и м ожет на­
пугать новичка. В докуме нтации вы можете найти рекомендации в пользу применения
dselect, тем не менее не принимайте их во внимание и испол ьзуйте apt.
В случае типичной и нсталля ции UЬuntu, которая загружается с одного из стандартных
зеркал , узнать список доступных пакетов можно на веб-сайте package s . uЬuntu . com.
Этот веб-сайт и меет удобную поисковую систему. Если :же создается внутренний сервер
АРТ (см. раздел "Создание локального зеркала хранил и ща" н иже в этой главе) , то, конеч­
но, адм инистратор сам знает, какие пакеты доступны, и может сформировать их список.
Дистрибутивы обычно имеют пустые пакеты, которые существуют для того, чтобы фор­
мировать списки зависимых пакетов. Утилита apt автоматически загружает и и нсталл ирует
зависимые пакеты, благодаря чему можно легко устанавливать или обновлять блоки паке­
тов. Например, инсталл и руя пакет gnoшe-desktop-environment, можно быть уверенным
в том, что установлено все необходимое для пользовательского и нтерфейса GNOME.
Система А РТ вкл ючает в себя набор н изкоуровневых команд, таких как apt-get
и apt-cache, которые для большинства целей обернуты командой apt. Обертка я вляет­
ся более поздн и м дополнением к системе, поэтому вы по- прежнему будете видеть ссыл ­
к и н а низкоуровневые команды в И нтернете и в документации. В первом прибл ижен и и
команды , которые выглядят одинаково, на самом деле являются одной и той :ж е коман ­
дой . Например, нет никакой разницы между apt- install и apt-get install .
Есл и файл /etc/apt/sources . li s t (см . его подробное описание н иже в этой гла­
ве) настроен , а имя необходимого пакета известно, то осталось л и ш ь выпол н ить коман­
ду apt update, чтобы обновить и нформацию о пакетах. П осле этого от имени привиле­
гированного пользователя нужно ввести команду apt install имя_ па к е т а , которая,
Часть 1. Основы администрирования
204
собственно, и осуществит инсталляцию пакета. Эта же команда обновит пакет, если он
уже и нсталлирован.
П редположим , требуется установить новую версию пакета sudo, в котором устранена
очередная брешь. Сначала не поме шает выпол нить команду apt-get update.
deb i a n $ sudo apt update
G e t : l h t t p : / / h t tp . u s . de b i a n . o rg s t a Ы e /ma i n P a c k a g e s [ 8 2 4 kB ]
G e t : 2 h t t p : / / n on - u s . de b i a n . o r g s t aЫ e / no n - U S /ma i n Re l e a s e [ 1 0 2 В ]
Теперь можно приступить к получению пакета. Обратите внимание н а то, что м ы ис­
пользуем команду sudo в процессе инсталляции нового пакета sudo - утил ита apt спо­
собна обновлять даже те пакеты, которые в настоящий момент используются.
deb i a n $ sudo apt ins tall sudo
R e a d i n g P a c k a g e L i s t s . . . Done
B u i l d i n g Dependency Tree . . . Done
1 p a c ka g e s u p g r a d e d , О newly i n s t a l l e d , О t o r emove a n d 1 9 1 not u p g r a d e d .
N e e d t o g e t O B / 1 2 2 kB o f a rc h i v e s . A f t e r u np a c k i n g l З l kB w i l l Ье u s e d .
( Re a d i n g d a t aba s e . . . 2 4 3 5 9 f i l e s and di r e c t o r i e s c u r r e n t l y i n s t a l l e d . )
P r e p a r i n g t o r e p l a c e s udo 1 . б . 2 р 2 - 2 ( u s i n g . . . / s u do_ l . 8 . 1 0 p 3 - l +de b 8 u 3
amd 6 4 . dе Ь ) . . .
Unp a c k i n g r e p l a cement sudo . . .
S e t t i n g up s udo ( l . 8 . 1 0p 3 - l + d e b 8 u 3 )
I ns t a l l i n g n e w ve r s i on o f c o n f i g f i l e / e t c /pam . d / s u d o
Н ас т рой ка конфигура ции хра нилища
Н астроить конфигураци ю систе м ы АРТ несложно. Хорошие инструкции можно най­
ти в документации по управлен и ю пакетами в системе Ubuntu по адресу:
h e l p . ubun t u . com/ c ommu n i t y /Ap t Ge t / Howto
Сам ы й важн ы й конфигурацион н ый файл утилиты называется / etc/ apt/ source s .
l i s t . В нем сообщается, где искать пакеты. В каждой строке файла указы вается следу­
ющее.
•
Тип пакета. В настоящее время это deb ил и deb- s r c для пакетов в стиле Deblan
либо rpm или rpm- s r c
для RPM.
-
•
•
U RL-aдpec файла, компакт-диска, сервера НТТР или FТР, где находятся пакеты .
Дистрибутив (на самом деле - название выпуска), если нужно работать с несколь­
ким и версиями пакета. Дистрибьюторы используют его для главных выпусков, од­
нако вы можете испол ьзовать его для других цел е й , если вам нужны внутрен н и е
системы распространения. 2
•
Возможн ый с писок компонентов, т. е. категори й пакетов в рам ках дистрибутива.
Стандартная конфигурация вполне приемлема, есл и только не нужно создавать соб­
ствен ное хранил ище пакетов. Исходные пакеты загружаются при ис пользовании строк,
начи нающихся с deb- s r c .
Работая в с истеме Ubuntu, вы почти наверняка захотите включ ить в н е е ком понент
universe , который предоставляет доступ к открытым программ н ы м средствам большого
2Дистри бьюторы и с п ол ьзуют поле ди с тр и бутив для оп ределе н и я ос новных в ы пусков, н о
для внутренних систем распространения вы можете испол ьзовать его, к а к с а м и захотите .
Глава 6. Инсталляция и управление программным обеспечением
205
( по объему) м ира Linux. Пакеты multiverse включают такие н еоткрытые исходные тек­
сты , как некоторые утилиты и компоненты VMware.
В процессе редактирова н и я файла s ou r ce s . l i s t вам следует п е р е настроить
отдел ь н ы е зап и с и для указан и я адреса зеркал а , задав бол е е бли зко рас п оложен ­
н ы й сервер. П ол н ы й список зеркал Ubuntu н аходится п о адресу: l aunchpad . ne t /
ubuntu/+archivemirrors . Это динамический ( и дл и н н ы й ) с п исок зеркал , которы й
регулярно изменяется, поэтому обязательно отслеживайте изменения между выпусками .
Убедитесь, что в качестве источн ика указан элемент securi ty . ubuntu . com, и тог­
да вы точно получите доступ к сам ым последни м исправлениям , связанн ы м с м ерами
по укреплению безопасности .
Пример файла /etc/apt/ sources . l i s t
В показанном н иже примере в качестве источ н и ка пакетов дл я загрузки основных
ком понентов Ubuntu испол ьзуется адрес us . archive . ubuntu . com (эти компоненты
полностью поддерживаются командой разработчиков Ubuntu) . Кроме того, этот список
(sources . l i s t) включает неподдерживаемые (но с открытым исходны м кодом) пакеты
universe и небесплатные неподдерживаемые пакеты в компоненте multiverse . В каждом
ком поненте также предусмотрено хранилище для обновлений, т.е . пакетов с исправлен­
ными ошибками . Наконец, последние шесть строк предназначены для обновлен и й , с вя­
занных с безопасностью.
# Общий форма т : тип URL -aдp e c дистрибутив [компоненты}
deb h t tp : / / a r c h i ve . ubun t u . c om / ubunt u x e n i a l ma i n r e s t r i c t e d
deb - s rc h t tp : / / a r chive . ubuntu . com/ubu n t u x e n i a l ma i n r e s t r i c t e d
deb h t tp : / / a r c h i ve . ubun t u . c om / ubunt u x e n i a l -upda t e s ma i n r e s t r i c t e d
deb - s r c h t tp : / / a r c h i v e . ubuntu . com/ubuntu x e n i a l -upd a t e s ma i n r e s t r i c t e d
d e b h t tp : / / a r chive . ubunt u . com/ubun t u x e n i a l unive r s e
deb - s rc h t tp : / / a r c h i v e . ubuntu . com/ ubuntu x e n i a l u n i ve r s e
d e b h t tp : / / a r c h i ve . ubunt u . c om/ubunt u x e n i a l - upd a t e s unive r s e
deb - s rc h t tp : / / a r chive . ubun t u . com/ubuntu x e n i a l -upda t e s unive r s e
d e b h t tp : / / a r ch i ve . ubunt u . c om/ ubunt u x e n i a l mu l t i ve r s e
deb - s rc h t tp : / / a rchive . ubuntu . c om/ubunt u x e n i a l mul t i ve r s e
d e b h t tp : / / a r c h i ve . ubunt u . c om/ubunt u x e n i a l -upda t e s mu l t ive r s e
deb - s rc h t tp : / / a rchive . ubuntu . com/ubuntu x e n i a l - upda t e s mul t i ve r s e
deb h t tp : / / a r c h i ve . ubunt u . c om/ubun t u x e n i a l - b a c kpo r t s ma i n re s t r i c t e d
u n i ve r s e mu l t i ve r s e
deb - s r c h t tp : / / a r c h i v e . ubuntu . com/ubun t u x e n i a l - b a c kpo r t s ma i n r e s t r i c t e d
unive r s e mul t ive r s e
d e b h t tp : / / s e c u r i t y . ubun t u . com/ ubun tu x e ni a l - s e c u r i t y ma i n r e s t r i c t e d
deb - s rc h t tp : / / s e c u r i t y . ubuntu . com / ubuntu x e n i a l - s e c u r i t y m a i n r e s t r i c t e d
d e b h t tp : / / s e c u r i t y . ubuntu . com/ubun t u x e n i a l - s e c u r i t y unive r s e
deb - s rc h t tp : / / s e c u r i t y . ubun t u . com/ubu n t u x e n i a l - s e cu r i t y u n i ve r s e
d e b h t tp : / / s e cu r i t y . ubuntu . com/ubun t u x e ni a l - s e c u r i t y mu l t i ve r s e
deb - s rc h t t p : / / s e c u r i t y . ubun t u . com/ubunt u x e n i a l - s e c u r i t y mul t i ve r s e
Поля дистрибутив и компоненты помогают утилите apt ориентироваться в иерар­
хии файловой системы хранилища Ubuntu , которая характеризуется стандартизованн ы м
размеще н и е м . Корн е вой дистрибутив для каждого выпуска может быть помечен как
t h r u s t y , x e n i a l или y a ke t t y . Доступ н ы м и ком понентами обычн о явля ются m a i n ,
u n i ve r s e , mu l t ive r s e и re s t r i c t e d . Если вас устраивает наличие н еподдерживаем ых
206
часть 1. основы администрирования
(и с ограниченной лицензией в случае mu l t i ve r s e ) програм м в ваш е й среде , добавьте
хранилища u n i ve r s e и mu l t i ve r s e .
После обномения файла s o u r c e s . l i s t выпол ните команду apt-get update, что­
бы заставить систему АРТ учесть ваш и изменения.
Созда ние локального зер к ала хран илища
Если вы планируете применять утилиту apt для большого числа компьютеров, то по­
требуется локальное кеширование пакетов - загружать копии всех пакетов для каждого
компьютера б ыло бы н еразум но. Совсем не трудно сконфиrурировать зеркало хра н и ­
л и щ а , которое было бы удобн ы м для локал ьного адм и нистрирования. О т вас требуется
лишь отслеживать обномения с помощью испрамен и й , связанных с безопасн остью.
Лучше всего для такой работы использовать удобн ы й пакет apt-mi rror , который
доступен на сайте a p t -mi r r o r . g i t h u b . i o . Вы можете также и нсталлировать пакет из
компонента uni v e r s e с помощью команды sudo apt install apt-mirror.
П осле и нсталля ц и и пакета ap t-mirror в каталоге / e t c / ap t вы найдете файл
mirror . l i s t. Это теневая версия s ources . l i s t , но она испол ьзуется только как ис­
точник для зеркального отображен ия операций. По умолчанию mirror . l i s t содержит
все хранилища для запуска версии Ubuntu.
Для того чтобы в действительности воспроизвести хранил и ща в mirror . l i s t, н е ­
обходимо запустить пакет apt-mirror с правами root .
ubun t u $ sudo apt-шirror
Down l o a d i n g 1 62 i n d e x f i l e s u s i n g 2 0 t h r e a d s . . .
B e g i n t ime : S u n Feb 5 2 2 : 3 4 : 5 8 2 0 1 7
(20] . . . [ 19] . . . ( 18 ] . . . ( 17 ] . . . [ 1 6 ] . . . [ 15 ] . . .
( 14] . . .
По умолчанию пакет apt-mirror помещает с вои копи и хранил и ща в каталог /var/
spool/apt-mirror. Можно закомментировать строку s e t b a s e_ра t h в файле mirror .
l i s t , но не забудьте создать в новом корневом каталоге зеркала подкаталоги mirror,
skel и var.
Пакету apt-mi rror требуется м ного вре м е н и для первого прохода, поскол ьку ему
приходится отображать м ножество гигабайтов дан н ы х ( н а дан н ы й момент прибл и ­
зительно 4 0 Гбайт для выпус ка Ubuntu ) . Последующие проходы протекают быстрее
и должн ы быть реализованы автоматически (из демона cron). Для того чтобы избавить­
ся от уже устаревших файлов, можете запустить сценарий clean . sh из подкаталога var
своего зеркала.
Для того чтобы приступ ить к испол ьзова н и ю с воего зеркала, воспол ьзуйтесь (с по­
мощью своего л юбимого неб-сервера) базовым каталогом через протокол НТТР. М ы лю­
бим испол ьзовать с и м волические ссылки на веб-корень. Вот пример.
ln - s /var / spool/ apt-шirror/us . archive . uЬuntu . coш/uЬuntu /var/www /uЬuntu
Для того чтобы заставить клиентов испол ьзовать с вое локал ьное зеркало, отредакти­
руйте файлы sources . l i s t так, как если бы выбрал и нелокальное зеркало.
А вто м атиза ция работы систе мы А РТ
Утилиту apt можно запускать по графику с помощью демона cron. Даже есл и па­
кеты н е и нсталлируются автоматически, полезно регулярно вы пол нять команду apt
update, чтобы следить за обномениями сводных файлов.
Глава 6. Инсталляция и управление программным обеспечением
207
Команда apt upgrade загрузит и и нсталлирует новые верс и и любых пакетов, имею­
щихся на локальном ком пьютере . Обратите внимание на то, что команда apt upgrade
определена немного инач е , чем н изкоуровневая кома нда apt-get upgrade. Тем н е ме­
н е е о н а точно соответствует ваши м целям . ( О н а экви вале нтна команде apt-ge t di s t­
upgrade - -wi th -new-pkgs . ) Команда apt upgrade может удалить пакеты , которые
утилита посчитает несовместимым и с модерн изиро ванной системой, так что к этому
нужно быть готовым .
Если вы л юбите риск, то можете даже позволить авто м ат и чес кое обновление с зер­
кала дистрибутивов. Для этого предназначен параметр -у утилиты apt-get, благодар я
которому на любой вопрос будет выдано оптимистичное "Да! " И м е йте в в иду, что не­
которые обновл е ния (например, пакеты ядра) могут не вступать в с илу до тех п ор , пока
система не будет перезагружена.
Обыч н о н е рекоме ндуется автоматически загружать обновл е н и я н е п осредстве н но
с зеркал дистрибутивов. Другое дело, когда имеются в н утре н н и е серверы А РТ и система
управления версия м и . Следующий маленький сценарий позволит клиенту поддержи вать
синхронизацию с сервером АРТ.
# apt update & & apt upqrade
-у
Этот сценарий может запускаться демоном cron по расписани ю. Можно также соз­
дать ссылки на него в сценариях запуска с исте м ы (см. главу 2), чтобы обновления вы­
полнялись на этапе начальной загрузки.
Если процедуры обно вления запускаются на большом ч исле ком пьютеров, то с помо­
щью демона cron необходимо распределить их по вре мен и , чтобы не перегрузить сеть.
Есл и вы не вполне доверяете источ н и ку пакетов, можно авто м ат и чес ки загружать
их, но не инсталлировать. Это позволяет делать опция - -download-only утилиты apt­
get. Просмотрите полученные пакеты и определите сам и , какие из н их и нсталлиро­
вать. Загружен н ые пакеты находятся в каталоге /var/ aaahe / apt, которы й со време­
нем может серьезно разрастись. Удаля йте неиспользуе мые файл ы командой apt-ge t
autoclean.
Сис тема yum: уп ра вление в ыпуска ми дл я RPM
Система yum (Yellowdog Updater, Modified) представляет собой адм и нистратор метапа­
кетов, основанн ы й на RPM. Называть yum клоном apt, пожалуй , неправильно - в плане
тематики и реализации они очень похожи, но на практи ке yum проще и м едлен н ее .
Команда yum-arch на стороне сервера ком пилирует базу дан н ых заголовочной и н ­
формации из большого набора пакетов (нередко из целого в ыпуска). П осле этого база
данных заголовков совм естно испол ьзуется пакетами поср едство м протокола НТТР.
Клиенты испол ьзуют команду yum для выбора и ин сталл я ци и п акетов; yura. выявл я ет
ограниче н ия зависимостей и выпол няет дополнительные действия , необходимые для за­
вершения процесса и нсталляции требуе м ых пакетов. Есл и запрош е н н ы й пакет зависит
от других пакетов, yum загружает и инсталлирует и эти пакеты.
Сходство м ежду apt и yum распространяется на опции командной строки , которые
понятны им обоим . Н апример, yum install foo за гружает и и нсталл и рует самую све­
жую версию пакета foo (и его зависимости , если это необходимо). Однако существует
как м и н и мум одно " предательское " отличие: apt update обновляет кеш и н фор м а ци и
о пакетах apt, а yum update
каждый пакет в с ист ем е (аналогично команде apt -get
update) . Более того, есть еще команда yum upgrade , которая делает то же , что и yum
update , но устаревшими приемами .
-
208
Часть 1. Основы администрирования
Команда ywn не рассматривает частичные имена пакетов, если не вкл юч ить символ ы
ун иверсал изации оболочки (такие, как * и ? ) . Например, ywn update ' l ib* ' обнов­
ляет все пакеты, имена которых начинаются с " lib" . Не забывайте заключать с и м волы
универсализации в кавычки, чтобы избежать возникнове н ия ошибок.
В отличие от apt, программа ywn во врем я запуска по умолчан ию сверяет информа­
цию о пакетах, хранящуюся в кеше, с содержимым сетевого хранил и ща. Для того чтобы
отменить этот процесс, используйте опцию - с , в результате чего ywn makecache будет
обновлять локал ьн ы й кеш (на это уйдет некоторое время). К сожал е н и ю , опции -с не­
достаточ но, чтобы повысить производительность медлител ьной ywn
Конфигурацион н ы м файлом ywn является /etc/ywn . conf. Он включает общие оп­
ции и указатели на хранил и ща пакетов. Можно активизировать одновременно м ноже­
ство хранил и щ ; каждое хран ил ище может быть связано с множеством U RL-aдpecoв.
Замена для ywn под названием DN F (для Dandified Yum) находится в активной разра­
ботке. Эrа программа уже используется как менеджер пакетов по умолчанию для системы
Fedora и в конечном итоге полностью заменит yum. Система DN F поддерживает более вы­
сокое разрешение зависимостей и, пом имо всего прочего, улучшен н ы й и нтерфейс при­
кладного программирования. Посетите сайт dnf . baseurl . org, чтобы узнать больше.
.
6.5. У ПРАВЛЕНИЕ ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ
в СИСТЕМЕ FREEBSD
У систе м ы Free B S D есть возможность управления пакетами для нескольких
выпусков, но она еще только переходит на полностью пакетно-ориентиро­
ванную модель дистрибуции, в которой большинство эле ментов основной
операцион ной систе м ы определя ются как пакеты. В последн их выпус ках
систе м ы Free B S D и меется программное обеспечение, разделенное по трем
основн ы м категориям.
•
•
•
Базовая система , которая включает в себя набор ос новных программ н ы х средств
и утил ит.
Набор бинарных пакетов, управляемых командой pkg.
Отдельная система портов, которая загружает исходн ый код, применяет исправл е ­
н ия Free BSD, затем собирает и устанавливает е е .
Нач и ная с версии Free BSD 1 1 , границы между этими территориями стали е щ е более
запутанными. Базовая система уже упакована, но старая схема управления базовой сис­
темой как един ы м целым все е ще существует. М ногие программные пакеты могут быть
установлены л ибо как двоичные пакеты, либо как порты с аналогич н ы м и результатам и ,
но с разны м и последствиям и для будущих обновлений. Однако взаимная совместимость
еще не обеспечена; некоторые вещи могут устанавливаться только как порт или как пакет.
Одна из целей верси и Free BSD 1 2 заключается в том , чтобы более решител ьно пере­
кл юч ить систему на универсал ьное управление пакетами . Базовая система и порты мо­
гут продолжать существовать в той или иной форме ( в настоящее время сли ш ком рано
говорить точно, как все будет работать) , но будущее направление ясно.
Соответстве н н о , попробуйте , по возможности , управлять допол н ител ь н ы м про­
грамм н ы м обеспечением с помощью pkg. Избегайте портов, если требуемое программ­
ное обеспечение н е имеет упакованной версии или вам нужно настроить параметры вре ­
мени ком пиля ции.
Глава 6. Инсталляция и управление программным обеспечением
209
Еще одн и м особе н н ы м событием "железного века" U N IX я вл я ется требова н и е
Free BSD о том , чтобы добавляемые пакеты был и локал ьн ы м и , хотя о н и компилируются
системой Free B S D и выпускаются как часть официального хранилища пакетов. Пакеты
устанавл ивают двоичные файлы в каталог /usr/local , а большинство файлов конфигу­
рации хранятся в каталоге /usr/local/etc, а не /etc.
Базовая система
Базовая система обновляется как единое целое и фун кционально отличается от л ю­
бых дополн ительных пакетов ( по крайней мере теоретически) . Базовая система поддер­
живается в хранилище Subversion . В ы можете просмотреть исходное дерево , включая все
ветви источника, на сайте s vnwe b . f reeb s d . o r g .
Определены несколько ветвей разработки .
•
•
•
Ветвь C U RRENТ предназначена только для активных целей развития . Она первой
получает новые функции и исправления, но не получила широкого распростране­
н ия от сообщества пользователе й .
На ветви S TABLE регулярно обновляются улучшения, предназначенные для следу­
ющего крупного выпуска. Она содержит новые функции , но поддерживает совме­
стимость с пакетом и проходит тестировани е . Оно может содержать ошибки или
повреждать изменения и рекомендуется , только если вы не боитесь р иска.
Ветвь RE LEASE разворачивается из ветки S TABLE , когда достигается цель выпуска.
Она остается в основном статичной. Еди нстве н н ы м и обновл е н и я м и для ветки
RELEASE я вляются исправления слабостей систе м ы безопасности и исправления
серьезных ошибок. Официальные образы I S O находятся на ветки RELEAS E , и она
является еди нственной, рекомендованной для использования в производственных
системах.
Просмотрите текущую ветвь ваше й с истемы с помощью команды uname -r.
$ uname - r
1 1 . 0 - RELEAS E
Выпол н ите команду freebsd-update, чтобы ваша с истема обновлялась с последни ­
ми пакетами. Получение обновлений и их установка являются отдельн ы м и операциям и ,
н о вы можете объедин ить их в одну командную строку:
$ sudo freeЬsd-update fetch ins tall
Эта команда извлекает и устанавл ивает последн ие базовые двоичные файлы . Она до­
ступ на тол ько для ветки R E LEAS E ; двои ч н ые файлы для ветвей S T AB LE и C U RRENT не
создаются . Этот же инструмент можно испол ьзовать для обновле ния верси й систе м ы .
Например:
$ sudo freebsd-update -r 1 1 . 1 -RELEASE upgrade
Менеджер п акетов pkg в системе FreeBSD
Программа p k g я вляется интуитивно понятной и быстродействующей . Это самы й
простой способ установить программ ное обеспечение, которое е ще н е вкл ючено в базо­
вую систему. Используйте команду pkg help для быстрой ссылки на доступные подко­
манды или команду help pkg для отображения справочной страницы для определенной
подкоманды .
В табл . 6.2 перечислены некоторые из наиболее часто испол ьзуе м ых подкоманд.
часть 1 . Основы администрирования
210
Таблица 6 . 2 . Примеры подкоманд pkg
Команда
pk q ins tall
p k q backup
Ч то это делает
-у
па кет
pk q info
pk q info п а к е т
pk q search -i пакет
pk q audit - F
pk q which файл
pk q autore111ove
Выполняет инсталляцию без вопросов "Вы уверены ? "
Делает резервную копию базы локальных пакетов
Перечисляет все установленные пакеты
Показывает расширенную информацию о пакете
Выполняет поиск хранилища, в котором находится пакет (без учета
регистра)
Показывает пакеты с известными слабостями системы безопасности
Показывает, какому пакету принадлежит названный файл
Удаляет неиспользуемые пакеты
pk q delete п а к е т
Удаляет пакет (тот же, что и re111ove)
pkq clean - ау
pk q update
Удаляет кеш ированные пакеты из /var/ cache /p k q
pk q upgrade
Обновляет пакеты до последней версии
Обновляет локальную копию каталога пакетов
Когда вы устанавл иваете пакеты с помощью команды pkg ins tall , программа pkg
проверяет локал ь н ы й каталог пакетов, а зате м загружает запроше н н ы й пакет из хра­
нил и ща на сайте p k g . F r e e B S D . o r g . Как только пакет установлен , он регистрируется
в ба:Jе данн ых SQLite, хранящейся в файле /var/dЬ/pkg/ local . sql i te.
Старайтесь не удалять этот файл , чтобы систе ма н е потеряла информацию о том ,
какие пакеты были установлены. Создавайте резервные коп ии базы дан н ых с помощью
подкоманды pkg backup.
Подкоманда pkg version, предназначенная для сравнения версий пакета, имеет свое­
обра.зный синтаксис. Он использует символы =, < и >, чтобы показывать пакеты, которые
я нляются текущими, старше последней доступной версии или новее, чем текущая версия.
И с пользуйте следующую команду для отображения пакетов с обновлениями:
f r e e b s d $ pk g version -vIL=
<
n e e d s upd a t i n g
dri- 1 1 . 2 . 2 , 2
<
n e e d s upd a t i ng
gbrn- 1 1 . 2 . 2
<
n e e d s upda t i n g
har fbuz z - 1 . 4 . 1
<
n e e d s upda t i n g
l i bEGL - 1 1 . 2 . 2
( i ndex
( i nde x
( i ndex
( i ndex
has
has
has
has
13 . 0 . 4 , 2 )
13 . 0 . 4 )
1.4.2)
1 3 . 0 . 4_ 1 )
Эта команда сравн и вает все установленные пакеты с индексом ( - I ) в поисках тех па­
кетов, которые не являются ( - L) текущей версией (=) , и вы водит на экран подробн ые
сведения (-v) .
П рограмма pkg вы полняет поиск пакетов быстрее, ч е м G oogle. Например, кома н ­
д а pkg search dns находит все пакеты, содержащие в и м е н и слово dn s . Поисковый
термин является регулярн ы м выраже н и е м , поэтому вы можете искать что-то вроде pkg
search "'apache. Более подробная и н формация содержится в справке , которую выдает
команда pkg help search.
К оллекция порто в
Порты Free BSD представляют собой коллекцию всеrо проrраммноrо обеспечения, кото­
рое Free BSD может со:щать на основе исходных кодов. После инициализации дерева портов
вы найдете все доступное программное обеспечение в катеrоризированных подкаталогах
/usr /ports. Чтобы инициализировать дерево портов, используйте утилиту portsnap:
f r e e b s d $ portsnap fetch extract
Глава 6. Инсталляция и управление программным обеспечением
21 1
Чтобы обновить дерево портов в одной ком анде , используйте команду portsnap
fetch update.
Загрузка метаданн ых портов зан имает некоторое время. Загрузка включает указатели
на исходный код для всех портов, а также л юбые связанные с ними исправления для со­
вместимости с Free BSD. Когда установка метада н н ых будет завершена, вы можете ис­
кать п рограм мное обеспечение, а затем создавать и устанавл ивать все , что вам н ужно.
Например, оболочка z sh не включена в базу Free B S D . Используйте утилиту whereis
для поиска z sh, затем выпол н ите сборку и установку и з дерева портов:
f r e e b s d $ whereis zsh
bash : / u s r /port s / sh el l s / z sh
f r e e b s d $ cd /usr/ports / shells / zsh
f r e e b s d $ make ins tall clean
Чтобы удалить программное обеспечение, установленное через с истем у портов, за­
пустите команду make deinstall из соответствующего каталога.
Существует нескол ько с пособов обновл е н ия портов, но мы предпочитаем утилиту
portmaster. Сначала установите portmas ter из коллекции портов:
f r e e b s d $ cd /usr/ports /ports -mgmt/portmaster
f r e e b s d$ make ins tall clean
Выполните команду portmaster -L, чтобы увидеть все порты, имеющие доступные
обновления, и сразу обновите их с помощью команды portmaster - а .
Вы также можете устанавливать порты через portmaster. Фактически это несколько
более удобно, чем типичный п роцесс на основе команды make , потому что вам не н уж­
но покидать свой текущий каталог. Чтобы установить программу z sh , выпол н ите следу­
ющую команду:
f r e e b s d $ portmas ter shells/ zsh
Если вам нужно освободить место на диске, очистите рабочие каталоги портов с по­
мощью portmaster - с .
6.6. ЛОКАЛИЗАЦИЯ И НАСТРОЙКА КОНФИГУРАЦИИ
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Адаптация ком пьютеров к ваш е й локальной ( и л и облачной) среде я вляется одн и м
из основн ых зада н и й систем ного адми нистрирования . Для реше ния этих задач н ужен
структурированный и воспроизводим ы й с пособ.
В этой книге мы вернемся к данной теме в главах 23 и 26. Системы управления конфи­
гурацией - это ваш и инструменты для установки и настройки программного обеспечения
воспроизводимым образом . Они являются основны м ключом к правильной локализации.
Если отложить пробл е м ы с реал и зацией в сторону, откуда вы знаете , правильно ли
настроена ваша локальная среда? П еречисл и м нес колько моментов , которые следует
учитывать.
•
У пол ьзователе й н ет привил е г и й с истем ного адми н истратора. Н еобходимость
в них в ходе выполнения обы ч н ых операций вызывает подозрение и наверняка
свидетельствует о том , что кто-то и меет злой умысел.
•
У пол ьзователей нет намере н и й причин ить вред системе. Вы должны организо­
вать защиту систе м ы таки м образо м , чтобы она была защищена от неумы шл е н -
Часть l. Основы администрирования
21 2
ных ошибок и не передавал а первому встречному привил е ги и с истем ного адм и ­
н истратора.
•
П режде чем н аказывать пользователе й , изредка делающих что-то н е так , нужно
провести с н и м и беседу. На неумелые действия адми н истратора пользователи за­
частую реагируют неадекватно. Следовательно, если ваш и действия мешают поль­
зователя м работать, то это свидетельствует о проблемах в архитектуре .
•
Старайтесь ориентироваться на заказч и ка. Беседуйте с пользователя м и и поста­
райтесь узнать, какие задач и для н их являются сложны м и . П оп ытайтесь сделать
эти задачи гораздо проще .
•
Ваш и предпочте ния - только ваш и , и ничьи более. П ол ьзователи должны иметь
собственные предпочтения. По мере возможности такие варианты нужно предла­
гать всегда и везде .
•
Если ваш и решения, прин имаемые в адм и нистративных целях, вл ия ют на способ­
ность п ол ьзователе й обучаться систе м е , постарайтесь их изменить. Расскажите
о н их пользователя м .
•
Постоян но обновл яйте вашу локальную документацию и делайте ее легкодоступ ­
ной . Более подробно об этом можно прочитать в разделе 3 1 . 2 .
О рган изация локал изации
Если в компан ии тысяча комп ьютеров с различ ными конфигурациями, адми нистратор
вынужден тратить большую часть времени на выяснение причин того, почему такая-то
проблема возникла только на этом ком пьютере. Думаете , решением п роблемы будет уни­
фикация всех конфигураций? Не спешите с выводами! Ограничения, существующие в ре­
альном мире, а также различные нужды ваших пользователей делают это невозможны м .
М ежду администрированием многочисленных и бесчисленных конфигураций есть раз­
н и ца. Важно раздел ить ваш у установку на управляемые част и . Вы увидите , что одн и
части локализации применяются ко все м управляемым ком пьютерам , другие - только
к некоторы м из них, а третьи - только к отдельным ком пьютерам.
В процессе проектирован ия систе м ы локализации следует убедиться в том , что все
исходные дан н ы е хранятся в системе управления изменениями. Так вы с можете всегда
знать, какие изменения были тщател ьно провере н ы и готовы к развертыван ию. Кроме
того, это позволит вам идентифицировать пользователя , я вляющегося автором пробл е ­
матичных изменений . Ч е м больше человек участвуют в этом процессе, тем более важ­
н ы м является последнее утверждение.
Структурн ы е изменения
П о м и м о выпол н е н ия инсталляций с ч истого л иста, вам придется также постоянно
загружать и инсталлировать обновления. Следует иметь в виду, что на разных комп ьюте­
рах установлен ы различные сроки де йствия и предъявл я ются разн ые требования к ста­
бил ьности и периоду работоспособности .
Не стоит развертывать новые вы пуски программного обеспечения на всех ком п ью­
терах сразу. Наоборот, нужно делать это с учетом нужд каждой групп ы и потратить н е ­
которое время на выявление п робл е м на сам ых ранн и х этапах, чтобы н е допустить се­
рьезного поврежден ия с исте м ы . Важн ые серверы нельзя обновлять до тех пор , пока не
будет уверенности в надежности производимых изменени й , и избегайте пятниц, если вы
не готовы проводить долгие выходные перед монитором.
Глава 6. инсталляция и управление программным обеспечением
21 3
Свои преимущества есть и у разделения базового выпус ка операционной систе м ы
и выпуска локализаци и . В зависимости о т того, какую степень стабильности необходи­
мо достичь в ваше й среде , вы можете использовать второстепен н ые локальные выпуски
только для того, чтобы устран ить ошибки. Наш опыт подсказы вает, что добавление но­
вых функций н ебольши м и порциями приводит к более стабильному выполнению опе­
рац и й , чем при постановке изменений в очередь на следующие крупн ы е выпуски, что
сразу же с низит качество обслуживан ия. Этот принцип тесно связан с идеей н епрерыв­
ной и нтеграци и и развертывания (см . главу 26) .
Огра ничение кол ичества вы пусков
Ч асто имеет с мысл ограничивать максимал ьное количество выпусков, с которыми
вы хотите работать в л юбой момент времени. Н е которые администраторы придержива­
ются мнения, что если программное обеспечение работает надежно, то н и чего изменять
в нем н е н ужно. Они полагают, что не имеющая под собой почвы модерн изация с истем
стоит времени и денег и что новейший выпуск сли ш ком часто содержит м ного ош ибок.
Те же, кто вооружается эти м и принципами на практике , должны быть готовы к тому, что
активные выпуски придется коллекционировать во в местительном каталоге.
В отличие от них, администраторы , следящие за новинками , утверждают, что в слу­
чайной коллекции выпусков, вышедших м ного лет тому н азад, сл и ш ком трудно раз­
биратьс я , а управлять ею - тем более. Их козырем я вляются исправлен и я защиты,
которые должны обыч но применяться универсал ьн ы м образом и в строгом порядке .
И нсталлировать исправления в устаревших версиях операционной с исте м ы часто бы­
вает просто невозможно , поэтому администраторы сталкиваются с выбором: не и нстал ­
лировать обновл е н ия на некоторые комп ьютеры ил и пол ностью переходить на новые
внутрен н ие выпуски. Это н е сулит ничего хорошего.
Ни одн а из этих перспектив не является доказуемо верной, хотя м ы стараемся при­
держиваться м н е н и я , что луч ш е испол ьзовать огран и ч е н ное кол и чество выпусков.
Лучше выпол нять модернизацию по вашему собствен ному плану, чем руководствоваться
чьим-то планом .
Тест ирова ние
Важно протестировать измене ния, пока и х еще можно отмен ить. П о мен ьшей мере ,
это означает тестирование собствен н ых настроек. Но в той же сте п е н и это касается
и системного программного обеспечени я. Оди н известн ы й поставщик U N JX однажды
выпустил исправление, которое , будучи примененным определ е н н ы м образо м , выпол ­
няло команду rm - r f / . П редставьте последствия установки такого исправления в о всей
организации без предварительного тестирования.
Тестирование особенно полезно, когда применяются средства , с пособн ые автома­
тически устанавли вать ис правлен ия ( как бол ьш инство систем управл е н ия пакета м и ,
расс м отрен н ы х в этой главе) . Н икогда не подкл ючайте комп ьютеры , ответствен н ые
за в ы пол н е н ие кл ючевых задач , к службе обновл е н и я , с понсируемой поставщ и ком .
Постарайтесь подключить к этой службе простой ком п ьютер и уже с него распростра­
няйте изменения на остальн ые компьютеры в вашей орган изаци и .
m Дополнительную информацию о выявлении проблем см. в разделе 3 1 . 2 .
Если вы предвидите , что заранее запланирован ное обновление или изме нение может
вызвать у пользователе й некоторые проблем ы , сообщите им о ваших планах и позвольте
Часть 1. Основы администрирования
21 4
им связаться с вами , если у них возникнут какие-л ибо трудности. П озаботьтесь о том ,
чтобы пользователи имели возможность оперативно сообщать о замечен н ых ошибках.
В транснациональной компан и и можно подключить к тестированию иностранные
офисы . Участие пользователей из других стран особенно важно в случае м ноrоязыковых
систе м . Если н и кто в американском офисе н е говорит по-японски , необходимо связать­
ся с офисом в Токио и попросить их проверить все , что касается поддержки раскладки
кандзи (kanj i ) . Вообще , н а уди вл е н и е , бол ьшое ч исло с исте м н ы х параметров зависит
от региональных особенностей. К примеру, при тестировании п рограммного обеспече­
ния целесообразно проверять, установлена ли новая версия кодировки UTF- 8 , позволя­
ющая правильно отображать символы разных языков.
6.7. ЛИТЕРАТУРА
•
I NTEL CoRPORAПON AND SYSТEм SoFТ. Preboot Execution Environment (РХЕ) Specification,
v2. l. 1 999. p i x . n e t / s o f twa re / pxeboot / a r c h i ve / px e s pe c . p d f .
•
LAwsoN, №LAN. Wh a t itfeels like to Ь е а п open-source maintainer. wp . me / p l t 8 Ca - l ry.
•
PXELinux Questions. s y s l i nux . z y t o r . c om / w i k i / index . p h p / PXEL INUX.
•
Roo I N , J osIP. Deblan New Maintainers ' Guide. d e Ь i a n . o r g / d o c / ma i n t - g u i d e .
В этом докуме нте содержится полезная информация о пакетах deb. См . также
главы 2 и 7 справочн и ка по системе Deblan.
.
Глава
]
сценарии и командная
о б оло чка
Мас штабируемый подход к управлению системой требует, чтобы администрати вные
изменения структурировались, вос п роизводились и реплицировались н а нескол ьких
ком пьютерах. В реал ьном м ире это означает, что эти изменения должны быть подкре ­
пле н ы программ н ы м обеспечением , а не выполняться администраторам и , работающи­
м и по контрольным спискам , или , что еще хуже , по памяти .
Сценар и и стандартизируют адми нистративные обязанности и освобождают время
адм и нистраторов для более важн ых и и нтересных задач. Сценарии также служат сво­
его рода упроще н ной докуме нтацией, поскольку о н и зап ис ывают шаги , необходи м ы е
дл я выполнения конкретной задачи .
Основной альтернативой сценариям с истемных администраторов является исполь­
зование систем управления конфигурациями , описанных в главе 23. Эти с истемы пред­
лагают структурирован ный подход к админ истрированию, который хорошо масштаби­
руется для облака и сетей маши н . Однако они более сложны , более формальны и менее
гибки, чем простые обычные сценари и. Н а практике большинство адм и н истраторов ис­
пользуют комбинацию управления сценариям и и конфигурацией. Каждый подход имеет
свои сил ьные стороны , и он и хорошо работают вместе .
В этой главе мы кратко рассмотрим языки сценариев sh, Python и Ruby. М ы дадим
несколько важных советов по испол ьзованию оболочки, а также обсудим регуляр н ы е
выражения как общую технологию.
Часть 1. Основы администрирования
21 6
7 1 Основы СЦЕНАРИЕВ
.
.
В этой главе рассматри ваются различн ые варианты написания сценариев и языко­
вые особен ности. Эта информация полезна, но более важны м , чем л юбая из этих дета­
лей, является вопрос о том , как включ ить сценарии ( ил и , и наче говоря, автоматизацию)
в вашу ментальную модель систем ного адм и нистрирования.
Создание ми кросценариев
Начинающие системн ы е адми нистраторы часто отклады вают изучение сценариев,
пока не стол кнутся с особенно сложной или утом ительной работой . Например, необ­
ходимо автоматизировать резервное коп и рован ие определенного типа, чтобы оно вы­
полнялось регулярно и чтобы данн ые резервного копирования хранились в двух разных
центрах обработки данн ых. Или , возможно, есть конфигурация облачного сервера, ко­
торая была бы полезной для создания , инициализации и развертывания с помощью од­
ной команды.
Подобн ые разумные сценарии могут оставить впечатление, что сценарий - это се­
кретное оружие , которое должно приводиться в готовность только тогда, когда на го­
ризонте возникает большая задача. Допустим , что создание и отладка вашего первого
1 00-строч ного сценария заняли несколько дней. Вы же не можете тратить целы е дни
на каждую маленькую задачу... Н е так ли?
Н а самом деле в ы достигнете большей эффективности, сэкономи в несколько нажа­
тий клавиш здес ь и несколько команд там . Сценарии типа Marquee , которые я вляются
частью формальных процедур вашего сайта, - это лишь видимая часть айсберга. Н иже
ватерл и н и и лежат многие более мелкие фор м ы автоматизации, которые одинаково по­
лезны для системных адми н истраторов. Как правило, подходите к каждой задаче с во­
просом " Как справиться с этой проблемой , если она возникнет с нова? "
Больш и нство адм и нистраторов сохран я ют набор коротких сценариев для л и ч но­
го использования (вроде скриплетов) в своих каталогах /Ьin. Испол ьзуйте эти на­
спех сделанн ы е сценар и и , чтобы устран ить проблем ы , с которы м и вы сталкиваетесь
в повседневной работе . О н и обычно достаточно короткие , чтобы м ожно было их по­
нять с первого взгляда, поэтому и м не нужна документация, кроме простой и нструкции
об использовании. Обновляйте их по мере изменения ваших потребностей.
Для сценариев оболочки у вас также есть возможность определять фун кции , которые
находятся внутри конфигурационных файлов ( например, . bash_profile), а не в авто­
номн ых файлах сценариев. Функции оболочки работают аналогично автоном н ы м сце­
нариям , но не зависят от вашего пути поиска и автоматически перемещаются вм есте
с вам и везде, куда простирается среда оболочки.
В качестве иллюстрации рассмотр и м простую функцию оболочк и Bash , выполняю­
щую резервное копирование файлов в соответствии со стандартизованным соглашением
об именах.
�
f u n c t i on b a c kup ( ) {
n e wname= $ 1 . ' d a t e + % Y- %m- % d . % H % M . ba k ' ;
mv $ 1 $ n ewn ame ;
e c h o " Ba c k e d up $ 1 to $ n ewn ame . " ;
ер -р $ n ewn ame $ 1 ;
глава 7 . Сценарии и командная оболочка
21 7
Несмотря на фун кциональный с интаксис, этот код используется как сценарий или
любая другая команда.
$ backup afile
B a c k e d up a f i l e to a f i l e . 2 0 1 7 - 0 2 - 0 5 . 1 4 5 4 . ba k .
Основны м н едостатком функций оболоч ки я вляется то, что о н и хранятся в памя­
ти и каждый раз при запуске новой оболочки и нтерпретироваться должны заново . Но
на современном оборудовании эти затраты н езначительны.
В меньшем масштабе можно использовать псевдонимы, которые на самом деле яв­
ляются очен ь короткой разновидностью скриплета. И х м ожно определить л ибо с по­
мощью фун кций оболоч ки , л ибо с помощью встроенной функции ваш е й оболочки
(обычно называемой a l i a s ) . Чаще всего они устанавл и вают аргументы по умолчанию
для отдельных команд. Например,
a l i a s ls = ' l s - Fh '
заставляет команду l s вьщелять и мена каталогов и исполняемых файлов и выводить по­
нятные для челокека размеры файлов для дл и н н ых л истин гов ( например, 2 . 4 М ) .
Х орошо изуч и те несколько инструментов
Систе м н ые адм и нистраторы сталк иваются с больши м количеством п рограмм н ого
обеспечения. Они не могут быть экспертами во всем, поэтому, как правило, собирают
документацию, экспериментируют и поверхностно изучают новые пакеты программ но­
го обеспечения для настройки в локальной среде. Лень - это добродетель.
Тем не менее некоторые тем ы заслуживают детально го изуч е н ия, поскольку о н и по­
вышают вашу с илу и эффективность. В частности , вы долж н ы хорошо знать оболочку,
текстовый редактор и язык сценариев. ' Прочитайте руководства от корки до корки, а за­
тем регулярно ч итайте книги и блоги. Всегда есть чему поучиться.
Ис пользован ие технологий , подобн ы х этим , требует предварительного изуч е н ия
по нескольким причинам. В качестве и нструме нтов они довольно абстрактн ы ; трудно
представить все , что они могут сделать, не читая подробности. Вы не можете использо­
вать функци и , о которых не знаете.
Другая причина, по которо й эти инструменты вознаграждают затраты на обучение,
заключается в том , что о н и п рактичн ы ; большинство фун кций п отен циально цен н ы
дл я большинства администраторов. Сравните это с о средни м демоном сервера , где ваша
основная задача часто заключается в том , чтобы о пределить 80% функций , которые
не имеют отношения к вашей ситуаци и .
Оболоч ка или редактор - это и н струмент, который в ы испол ьзуете постоян н о .
П остепен ное улуч ш е н ие ваше го мастерства с помощью этих инструментов п р иводит
не только к повышению производительности, но и к большему удовольстви ю от работы.
Н и кто не л юбит тратить время на повторяющиеся детал и .
А втома тизиру й те все, что возможно
Сценарии оболочки не являются единстве н ной возможностью системных адми н и ­
страторов использовать автоматизацию. Существует целы й мир программируемых си­
стем - просто следите за ними. Активно эксплуатируйте эти объекты и используйте их
для повышения производител ьности труда - совместите инструменты со своим рабо­
ч и м процессом .
1 З абегая вперед, укажем , что это, вероятно, долж ны быть Bash, vim и Python.
Часть 1. Основы администрирования
21 8
Например, авторы английского издания создали эту книгу в среде Adobe In Design, ко­
торая якобы является графическим приложением . Однако она также допускает испол ьзо­
вание сценариев, написан ных на языке JavaScript , поэтому м ы создали библиотеку сце­
нариев I nDesign для реалюаци и и обеспечения соблюдения м ногих наших соглашений.
Такие возможности существуют повсюду.
•
•
•
Приложения Microsoft Office программируются на Visual Basic или С#. Если ваша
работа вкл ючает анал из или отчетность, делайте отчеты TPS (Testing Procedure
Specification) самостоятельно.
Бол ьшинство приложений Adobe допускают использование сценариев.
Если в ваш и обязанности входит работа с базами дан н ых, вы можете автоматизи­
ровать м ногие обы ч н ые задачи с помощью хран и м ых процедур SQL. Некоторые
базы дан н ых поддержи оают допол н ительные язы к и ; наприм е р , база Postgre SQ L
поддерживает язык Pyth o n
.
•
•
PowerShell
это оснооной и нструмент сценариев для систем M icrosoft Windows.
Сторонние дополнения, такие как Auto Hot Key, значительно облегчают автомати ­
зац и ю приложений Wi 11dows.
-
В системах m acOS некоторые приложе н ия могут управляться с помощью язы­
ка с ц е н а р и е в App l e S c r ipt . На систе м н о м уро в н е и с пользуйте п риложе н и е
"Automator " , " Службы" и действия с папками , чтобы автоматизировать разл ичные
задачи и подключить языки традиционного языка к графическому и нтерфейсу.
В мире системного админ истрирования некоторые подсистем ы имеют собственные
подходы к автоматизации . М ногие другие подсисте м ы хорошо сочетаются с системами
автоматизации общего назначен ия, такими как AnsiЫe , Salt, Chef и Puppet , описанными
в главе 23. Для всего остального существуют сценарии общего назначения.
Избегайте п реждев р еме н ной оп т имизации
Н ет н икакого реального различия между сценарием и программой . Разработч ики
языка иногда обижаются , когда их детища попадают в категорию сценариев, и не только
потому, что ярл ы к указывает на определенную н ехватку полноты , но также потому, что
некоторые языки сценариев в прошлом заслужили репутацию плохо организованных.
Впроче м , нам все еще нравится термин программирование сценариев (scripting) ; он оз­
начает испол ьзование програм много обеспечения в качестве своего рода универсально­
го клея, связывающего разл и ч н ые команды , библ иотеки и файлы конфигураци и в одно
функциональное целое.
Ад м и н истрати в н ы е с ц е н ар и и должн ы подч е р к и вать эффе кти в н ость програ м ­
м ы и ясность кода, а н е вычислительную эффективность. Это н е повод быть н еакку­
ратн ым , подтверждение того , что сценарии редко выполняются за одну-две секунды .
Оптимизация может иметь уди вительно низкую отдачу даже для сценариев, которые ре­
гулярно запускаются из демона oron.
Выберите п ра вил ь н ый я зык сценариев
В течение дол гого времен и стандартным языком для адми н истративных сценариев
был сценарий , определенный оболочкой sh. Сценарии оболочки обычно используются
для легких задач , таких как автом атизация последовательности команд или сборка не­
с кольких фильтров для обработки данн ых.
Глава 7. С ценарии и командная оболочка
21 9
Оболочка все гда доступна, поэтому сценарии оболочки относительно переноси­
мы и и меют несколько зависи мостей , отличных от команд, которы е они вызывают.
Н езависимо от того, выбираете ли вы оболочку, оболочка может выбрать вас: большин ­
ство сред включают в себя о гр омн ы й набор суrnествующих сценарие в sh, а адми нистра­
торы часто обязаны читать, понимать и настраивать эти сценарии.
Как язык программирования sh является несколько неэл егантным. Синтаксис явля­
ется специфическим , а оболочке не хватает расширенных возможностей текстовой об­
работки современных языков - функции, которые часто особенно полезны для систем­
ных адм инистраторов.
Язык Perl , разработанный в кон це 1 980-х годов , стал важным ш агом вперед для раз­
работки адми нистративных сценариев. Либерал ьн ы й синтакс ис , обширная библ иотека
пользовательских модулей и встроен н ая поддержка регулярн ых выражений сделали его
фаворитом с исте м н ых адми н истраторов на протяжен и и м ногих лет. Язык Perl разрешает
(а н екоторые говорят, поощряет) определен н ы й стиль кодирования " полн ы й вперед к черту торпеды "2• Существуют разные м нения по поводу того, является это преимуще­
ством или недостатком .
В наши дни язык Perl известен как Perl 5 . Эту верси ю следует отличать от перерабо­
тан но й и несовместимой версии Perl 6, которая наконец бьmа выпущена после 1 5 лет
подготовительных работ. К сожалению, Perl 5 немного устарел по сравнению с более но­
выми языками , а использование Perl 6 пока еще недостаточно распространено для того,
чтобы м ы рекомендовали его в качестве безопасного выбора. Возможно, м и р полностью
отказался от языка Perl . На дан ном этапе мы предлагаем избегать языка Perl , если вы
начинаете новый проект.
Языки JavaScript и РН Р лучше всего известны как языки для веб-разработки, но их мож­
но использовать в качестве инструментов для общего использования. К сожалению, оба
языка имеют недостатки дизайна, когорые ограничивают их привлекательность, и им не
хватает многих сторонних библиотек, на которые пмагаются системные администраторы.
Если вы прИЦUIИ из м ира веб-разработки , у вас может возни кнуть соблазн применить
существующие навыки Р Н Р или JavaScript дл я систе м ного администрирования. М ы ре­
комендуем не делать этого. Код есть код, но проживание с другим и с исте м н ы м и адм и ­
нистраторами в одной экосистеме приносит множество долгосрочных преимуществ. ( По
крайней мере, избегая Р Н Р, вам не придется терпеть насмешки, участвуя в вики-конфе­
ренциях локальных системных администраторов.)
Python и Ruby - современ н ы е , ун и версальны е языки программ ирования , которые
хорошо подходят для адм и нистративной работы . Эти языки я вляются результатом не­
с кол ьких десятилетий развития языкового дизайна по сравне н и ю с оболочкой , а их
средства обработки текста настолько сильн ы , что sh может тихо курить в сторонке.
Основной недостаток как Python, так и Ruby закл ючается в том , что их среды могут
быть нем ного неудобны м и для н астройки , особенно когда вы нач и наете использовать
сторонние библиотеки , которые скомпилировали компоненты, написанные на языке С.
Оболоч ка обходит эту проблему, отказавшись от модульной структуры и сторон н их би­
блиотек .
В отсутствие вне ш н их ограничений Python является наиболее широко испол ьзуемым
языком с ценариев для системных адми нистраторов. О н тщательно разработан , широко
используется и поддерживается другими пакетами. В табл. 7. 1 приведены некоторые об­
щие примечания о других языках.
2 Цитата героя Гражданской войн ы в С ША адмирала Дэвида Фаррагуrа (David Farragut) .
-
Примеч. ред.
Часть 1. Основы администрирования
220
Табли ца 7 . 1 . Ш ифрование на языке сценариев
Language
Designer
Описание
Bourne shell
Стефан Борн ( Stephen Bourne)
Простая серия команд, переносимые сценар и и
bash
Брайан Фокс ( Brian Fox)
Похожа на оболочку, написанную Борном, но
более приятная , х отя и менее переносимая
C shell
Билл Джой ( Bill Joy)
Никогда не используйте для создания сценариев; см. сноску в разделе 7.2
JavaScript
Брендан Эй х (Brendan Eich)
Веб-разработка, сценарий приложений
Perl
Ларри Уолл ( Larry Wall)
Быстрые и однострочные сценарии , обработка текста
РНР
Расмус Лендорф ( Rasmus Lerdorf)
Вы плохо себя вели и заслуживаете наказания
Python
Гвидо ван Расмуссен (Guido van Rossu m )
Сценарии общего назначения, обработка
данных
Ruby
"Мац" Мацумото ( " Matz" Matsumoto)
Универсальные сценарии, веб
Следуйте рекоменда ци я м
Н есмотря на то что фрагме нты программ в этой главе снабже н ы н е которы м и ком­
м ентариями и сообщениями о правильном применении сценариев, они являются сли ш ­
к о м схем атичны м и . Существует множество книг о написании качествен н ых програ м м ,
но все ж е будет н е л и ш н и м изложить здесь некоторые ос новн ые рекомендации по н а ­
писанию сценариев.
•
•
•
•
•
При запуске с неадекватными аргуме нтам и сценар и й должен вывести сообщение
о его корректном применении и завершиться. М ожно также реализовать возмож­
ность получения справочной информации ( - -help).
Проверяйте входные данные и выходные значения на корректность. Например, пре­
жде чем выполнять команду nn -rf ДIIЯ каталога, следует сначала дважды проверить,
что полученный в результате путь будет соответствовать ожидаемому образцу.
Сценар и й должен возвращать н адл е жащ и й код завер ш е н и я : н ул ь - в слу­
чае усп е ш ного выпол н е н и я и н е н ул е вое знач е н и е - п р и н е удачном исходе .
Н еобязательно сопровождать каждый вид отказа уникальн ы м кодом завершения ,
однако следует поинтересоваться, какая и нформация бьша бы полезной для вы­
зывающих процедур.
Используйте соответствующие соглашения о присвоен и и имен для переменных,
сценариев и подпрограмм . П р иведите в соответствие соглаше н и я , действующие
в языке , в остальной части кодовой основы ваше го сайта и, что самое важное ,
других перем е н н ы х и функциях, определенных в текущем проекте . Используйте
принцип смешанного регистра букв или знаки подчеркивания, чтобы сделать ч и ­
табельн ы м и длинные имена.3
Для переменных используйте имена, которые отражают хранимые в них значения,
но старайтесь все же давать имена покороче . Н апример, не n umbe r of l i n e s
o f i n p u t , а n l i ne s .
_
1 И ме н а самих сценариев также и меют большое значен и е . В это м конте ксте в рол и п робелов
дефисы предпочтительнее, чем знаки подчеркивания (например, sys tem-config-printer) .
Глава 7. Сценарии и командная оболочка
•
•
•
•
•
•
•
•
•
221
Разработайте руководство по стилю, чтобы вы и ваши коллеги могл и п исать код,
используя одн и и те же соглашения. Такое руководство облегчит вам понимание
кода, написан ного другим и програм мистами , а им - н аписанного вами.4
Начинайте каждый сценар и й с блока комментария, в котором будет сказано, что
делает данный сценарий и какие параметры он принимает. Не забудьте указать свое
имя и текущую дату. Если сценарий требует, чтобы в системе были инсталл и рованы
нестандартные инструменты , библиотеки или модули, обязательно перечислите их.
Комм ентируйте свой код, испол ьзуя такую степень детал изации, какую посчита­
ете полезной, с учетом временного " отхода" от этого кода и с п оследующим воз­
вратом к нему через месяц ил и два. И м еет смысл также комм ентировать выбор
ал горитма, причины неиспол ьзования более очевидного способа кодирования , не­
обычные пути в коде , все "трудные м еста " , возникшие в период разработки .
Н е загромождайте код бесполезн ы м и комм ентариям и ; отнеситесь к написанию
комм ентариев с точки зрения потен циал ьного ч итателя : п и ш ите лаконично, гра­
мотно и " по делу" .
Л учше запус кать сценарии о т и м е н и суперпол ьзователя r o o t . Не устанавливайте
для них атрибут s e t u i d , поскол ьку такие сценар и и довольно трудно сделать со­
верше н но безопасными. Для того чтобы реализовать надлежащие стратегии управ­
ления контролем доступа, используйте команду sudo.
Н е п и шите сценариев, которые вы не понимаете . Адми н истраторы часто рассма­
тривают сценарии как авторитетную документаци ю о том , как следует выполнять
о пределен ную процедуру. Н е устанавливайте вводящ и й в заблужде н и е пример,
распространяя полусырые сценарии.
Н е стесняйтесь адаптировать код из существующих сценариев для своих нужд.
Только н е зан имайтесь программированием в стиле " копиру й , вставл я й и мо­
л ис ь " , если вы не пони маете код. Потратьте врем я , чтобы понять это. Это время
н икогда не пропадает зря.
В оболочке bash и спользуйте ключ -х, чтобы отобразить команды, прежде чем
они будут выпол н е н ы , и кл юч -n, чтобы проверить с интаксис команд без их вы­
полнения.
Пом н ите , что, выполняя Руthоn-сценарий, вы находитесь в режиме отладки , если
явно не отключили его с помощью аргумента -0 в командной строке. Это означа­
ет, что еще до вывода диагностических выходных дан н ы х вы можете протестиро­
вать специальную переменную
debug
Том Кристиансен (Tom Christiansen) предлагает следующие пять золотых правил
для генерирования полезных сообщений об ошибках.
•
Сообщения об ошибках должны направляться в канал STDERR, а не STDOUТ.
•
Включайте в сообщение об ошибке имя программы.
•
Указывайте виновн ика (имя фун кци и или операции) ошибочного действия.
•
Если к сбою приводит с истемный вызов, включите строку perror.
•
Есл и код завершения н е которой операции не равен н ул ю , обеспечьте выход из
программ ы .
4 С другой стороны, разработ ка руководства по ст ил ю позволит привлечь к себе в н и ма ние чле нов
ваш ей команды на несколько н едель. Н е ссор ьтесь из - за руководства по стилю ; старайтесь найт и
взаимоп о н и м а н и е и избе гай те дл и тел ьных п е реговоров по поводу использован и я квадрат н ы х
скобок и запятых . Главное - убеди ться , ч то все согласн ы с соглашениями о б и менах.
часть 1. Основы администрирования
222
7 2 Основы РАБОТЫ с ОБОЛОЧКАМИ
.
.
Система U N IX всегда предлагала пол ьзователя м выбор оболоче к , но одна из вер­
сий оболочки Boume, sh, была стандартной для каждой с исте м ы UN I X и Linux . Код
для оригинал ьной оболочки Bourne всегда был защищен лицензией АТ&Т, поэтому
в наши дни sh чаще всего проявляется в форме оболочки Almquist ( известной как ash,
dash или просто sh ) или же " возрожденной оболочки Boume" с именем bash.
Оболочка Almquist - это воспроизведе ние ориги н ал ьной оболочки Boume без из­
л ишеств. По совре ме н н ы м меркам ее едва ли можно использовать в качестве стартовой
оболочки (login shell) . Она предназначена тол ько для эффективного выполнения сцена­
риев оболочки sh.
Оболочка bash фокусируется на интерактивной работе. На протяжении м ногих лет
она вкл ючала в себя большинство полезных функци й , созданных для других оболочек.
Она по- прежнему запускает сценари и , предназначен н ые для ори гинал ьной оболочки
Bourne , но не особен но удобна для с ценариев. Н екоторые системы ( например, Deblan)
включают в себя как bash, так и dash. Другие полагаются на оболочку bash как для соз­
дания сценариев, так и для и нтерактивного использования.
Существуют разные варианты оболочки Вoume, в частности ksh (оболочка Kom) и род­
ственная ей оболочка z sh, которая обеспечивает широкую совместимость с sh, ksh и bash,
а также имеет множество интересных функций, включая исправление орфографии и улуч­
шенные средства универсализации (globblng). Насколько нам известно, она не используется
как оболочка по умолчанию в любой системе, но у нее есть что-то вроде культа.
Исторически В S D - производные систе м ы благоприятствовали интерактивной обо­
лочке на языке С , csh. В настоящее время она чаще все го встречается в виде расширен­
ной верси и tcsh. Несмотря на ранее широко распространенное применение csh в каче­
стве стартовой оболоч ки , ее не рекомендуется использовать в качестве языка сценариев . 5
tcsh - это превосходная и широко доступная оболочка, но о н а не является произ­
водной от sh. Оболочки сложны ; если вы не знакомы с оболоч кой, н ет смысла изучать
одну оболочку для сценариев, а вторую - с разл и ч н ы м и функциям и и синтакс исом для ежедневного испол ьзования. Придерживайтесь современной версии sh как оболоч­
ки двойного назначения.
В наши дни среди всех вариантов оболочки sh оболочка bash я вляется универсал ь­
ным стандартом . Чтобы легко перемещаться между разл ич н ы м и системам и , стандарти­
зируйте свою лич ную среду в bash.
В с истеме Free B S D оболочка tcsh используется по умолчанию, а оболочка
bash поставляется как часть базовой с исте м ы . Но это легко исправить: вы­
пол ните команду sudo pkg install bash для инсталляции оболочки bash
и используйте команду chsh, чтобы переключить оболочку. Вы можете уста­
новить bash как значение по умолчанию для новых пользователе й , выпол­
н и в команду adduser - с . 6
Прежде чем приступать к детализации сценариев оболоч ки, м ы должн ы рассмотреть
некоторые основные функции и си нтаксис оболочки.
� п одробное объяснен ие того, почему это так, содержится в класс и ч ес ком заявле н и и Тома
Кристиансена Программ ирование для csh считается вредным (Csh Programming Coпsidered Harmful). Оно
ши роко воспроизводится в И нтернете, например на сайте har!Пul . cat-v . orq/ softvare/ csh.
6 И зменение значен ия по умолчанию может показаться самонадеян н ы м , но стандартная система
Free BSD оrсьшает новых пользователей к оболочке Almquist sh, так что им некуда идти - только вверх.
Глава 7. Сценарии и командная оболочка
223
Материал в этом разделе относится к основным и нтерактивн ы м оболочкам в линей­
ке sh ( включая bash и ksh, но н е c sh или tcsh) , независимо от точной платформ ы ,
которую в ы испол ьзуете. Попробуйте фор м ы , с которым и вы еще н е знакомы , и поэк­
спериментируйте с ними!
Реда кти рова ние кома нд
Мы н аблюдал и , как м ногие редактируют командн ые строки с помощью клавиш
управления курсором . Вы ведь так не поступаете в свое м текстовом редакторе , верно?
Если вы предпочитаете редактор emacs , то все основные команды редактора ema c s
доступны при редактирован и и уже выпол н е н ного ряда команд (т. е . " предыстори и " ) .
Н ажав комбинацию клави ш < Ctrl+ Е > , вы переместитесь в кон е ц строки , а с помощью
комбинации клавиш < Ctrl +A> - в начало. Нажатие комбинаци и кл а виш < Ct rJ + P> по­
зволяет вернуться к предыдущим командам и вызвать их для редактирования. С помо­
щью комбинации клавиш < Ctrl + R> вы сможете шаг за шагом " прокрутить" свою " пре­
дысторию" и найти старые команды.
Если вы предпочитаете использовать редактор v i , п ерекл юч и те свою командную
оболоч ку в режим vi .
$ set -о vi
В режиме vi редактирование является модальны м , но вы начинаете работать в ре­
жиме ввода команд. Для того чтобы выйти из режима ввода, н ажмите вначале клавишу
< Esc > , а затем клавишу < i > , чтобы вернуться в него. В режиме редактирован ия нажатие
клавиш и < w > переместит вас вперед на одно слово; испол ьзование комби нации кла­
виш <f+X> позволит найти следующий символ "Х" в строке и т.д. " Прогул яться " по ко­
мандам , зафиксированным в " предыстории'' , можно с помощью клавиш < Esc> и < k > .
Реш ил и вернуться в режим редактирования emacs? Выполн ите следующую команду.
$ set -о emacs
К аналы и перена п ра вление потоков
Каждому процессу доступн ы по мен ьшей мере три информацион н ых канал а : "стан­
дарт н ы й ввод " ( S TD I N) , " стандартн ы й вы вод" ( S TDOUT ) и " стандартная о ш и б ка "
(SТDERR) . Эти каналы устанавл иваются ядром систе м ы "от имени процесса " , и поэтому
сам процесс не обязательно знает их направленность. О н и , например, могут быть свя­
заны с окном терм и нала, файлом, подключе нием к сети или каналом , при надлежащи м
другому процессу.
Для с истем U N IX и Linux испол ьзуется унифицирован ная модель ввода-вывода ,
в которой каждому каналу присваивается целое ч исло, име нуемое файловым дескрипто­
ром. Точ ное ч исло (номер ) , назначаемое каналу, обычно не имеет значе н и я , но каналам
SТD IN, SТDOUТ и STDERR гарантированно соответствуют файловые дескрипторы О, 1 и 2
соответственно, чтобы обеспечить безопасное обращение к н и м по номерам . В контек­
сте и нтерактивного окна терминала канал SТDIN обы чно сч итывает дан н ы е с клавиату­
ры, а оба канала SТDOUТ и STDERR записывают свои выходные дан ные на экра н .
Большинство команд с истемы U nix принимают входн ые дан н ы е из канала STDIN.
Выходная информация записывается ими в канал STD OUT , а сообще ния об ошибках в канал SТDERR. Это соглашение позволяет объединять команды подобно строительн ы м
блокам для организации кон вейерной обработки дан ных.
Командная оболочка и нтерпретирует с и м вол ы " < " , " > " и " > > " как инструкции
по изме нению направления передаваемых командой дан н ых в файл или принимаемых
Часть 1. Основы администрирования
224
дан ных из файла. Символ " < " связывает канал STDIN с содержим ы м некоторого суще­
ствующего файла. Символы " > " и " > > " перенаправляют поток STDOUT ; причем символ
" > " используется для замены содержимого файла, а " > > " - для добавления дан ных в его
конец. Например, команда
$ qrep bash /etc /passwd > / tmp/bash-users
коп ирует строки , содержащие слово "bash " из файла /etc/pas swd в файл / tmp/bash­
users (при необходимости файл будет создан). Следующая команда упорядочивает со­
держимое этого файла и выводит резул ьтат на терминал .
$ sort < / tmp /bash-users7
r o ot : x : O : O : r o o t : / r o o t : / b i n / b a s h
Для того чтобы перенаправить потоки STDOUT и STDERR в одно и т о ж е м есто, и с ­
пользуйте с и м вол " > & " . Для того ч тобы перенаправить тол ько поток STDERR, испол ь­
зуйте вариант " 2 > " .
На примере команды f i nd можно показать, почему важно обрабаты вать потоки
STDOUТ и SТDERR отдельно. Дело в том , что она форм ирует выходн ые данные по обо­
им каналам , особенно в случае ее выполнения н е привилегированн ы м пол ьзователе м .
Например, п р и выполнении команды
$ find / -name core
обычно генерируется так м ного сообщен и й об ошибках " permission denied" (отсутствие
прав доступа) , что настоя щие результаты поиска теряются в " шуме " . Ч тобы отбросить
все сообщения об ошибках, можно использовать такой вариант.
$ find /
-name
core 2> / dev/null
В этой версии команды find только настоящие совпадения (где пол ьзователь имеет
разрешение на чтение родител ьского каталога) выводятся в окно терминала. Чтобы со­
хранить список совпадающих путей в файле, выпол ните такую команду.
$ find / -name core > / tmp/corefiles 2> /dev/null
Эта командная строка отправляет совпадающие п ути в файл / tmp / c o r e f i l e s , от­
брасы вая все ошибки и ничего не посылая в окно терминала.
Для того чтобы связать канал STDOUT одной команды с каналом STD IN другой, ис­
пользуйте символ " 1 " Рассмотрим несколько примеров.
.
$ find / -name core 2 > /dev/null 1 less
П ер вая команда в ыпол няет операцию find из предыдущего примера, но посылает
список найденных файлов не в файл , а в программу постраничного вывода les s .
$ ps - e f 1 qrep httpd
Здесь команда ps генерирует список процессов, из которого команда grep выбирает
строки , содержащие слово httpd. Результат выполнения команды grep никуда бол ьше
не перенаправляется , поэтому совпадающие строки попадают в окно терми нала.
$ cut -d : -f7 < /etc/pas swd 1 sort -u
Здесь команда cut выбирает из файла /etc/pas swd пути к оболоч ке каждого поль­
зователя . Список оболочек затем отправляется через команду sort -u, чтобы сформи­
ровать отсортированный список уникальных значений.
Для того чтобы последующая команда вы пол нялась тол ько в случае успеш ного вы­
полнения предыдущей , можно раздел ить эти команды с и м волом " & & " . Например, ко­
мандная строка
$ lllkd ir foo && cd foo
7По правде говоря , кома нда sort может работать с файлами напрямую, поэтому символ < в этом
контексте я вляется необязательным. Он используется здесь для иллюстрации .
Глава 7. Сценарии и командная оболочка
225
п ытается создать каталог с именем foo и в случае успеха выполняет команду cd. В данном
случае успех выпол нения команды mkdir будет зафиксирован при получении кода завер­
шения, равного нулю. Использование для этой цели символа, означающего операцию "ло­
гическое И " , может сбить с толку тех, кто в других языках программирования использовал
вычисления в сокращен ной форме записи. Если кому-то это непонятно, не стоит слишком
долго здесь застревать; а просто примите это как идиому командной оболочки.
И наоборот, символ " 1 1 " обеспечит выпол не н ие следующей ком анды только в том
случае, есл и предыдущая команда не выпол нится (т. е . сгенерирует ненулевое значен ие
кода завершения).
$ cd foo
1 1 echo "No such directory"
Для того чтобы разбить команду на нескол ько строк, для наглядности отделяя тем
сам ы м код обработки ошибок от остал ьной части командного кон ве йера, можно ис­
пользовать в сценариях обратную косую черту.
ер - - p r e s e rve - - r e c u r s ive / e t c / * / s p a r e / b a c kup \
1 1 e c h o " Di d NOT ma ke b a c kup "
Для получ е н и я обратного эффекта, т. е . объедин е н и я нескольких команд в одн о й
строке , можно использовать в качестве разделителя точ ку с запятой.
$ mkdir foo ; cd foo ; touch afile
Использование переменных и ка вычек
В операциях присваивания имена переменных н и как не выделяются, но предваряются
знаком доллара при ссылке на их значен ия .
$ etcdir= ' / etc '
$ echo $ etcdir
/etc
Н е ставьте д о и после знака равен ства ( ) пробел ы , в противном случае оболочка
ошибочно примет имя вашей переменной за имя команды.
При ссьшке на переменную можно заключить ее имя в фигурные с кобки, чтобы син­
такс ический анал изатор (да и сам человек) не сомневался в том , где заканчивается имя
перемен ной и нач инается другой текст; например, используйте запись $ { e t c d i r ) вме­
сто $ e t c d i r . Обычно без фигурных с кобок можно обойтись, но они могут оказаться по­
лезны м и в случае, если вам понадобится раскрывать переменные в строках с двойн ы м и
кавычками . Часто нужно сделать так, чтобы после значен ия пер е м е н ной стояли буквы
или знаки препинания . Например,
=
$ echo " Saved $ { rev } th vers ion of mdadm . conf . "
S aved B t h ve r s i on o f mdadm . c on f .
Для имен перемен н ых командной оболочки не существует стандартного соглашения,
н о обычно предполагается, что имена, пол ностью написанн ы е проп и с н ы м и буквами ,
принадлежат перемен н ы м среды ил и переме н н ы м , счита н н ы м и з файлов глобальной
конфигураци и . И чаще всего все буквы в именах локал ьных пере м е н н ы х - строчн ы е ,
а отдельные их ком поненты разделя ются символами подчеркивания. Вообще имена п е ­
ремен н ых чувствительн ы к регистру букв.
Командная оболочка интерпретирует строки, заключен н ые в одинарные и двойные
кавычки, почти одинаково. Различие состоит в том , что строки в двойных кавычках
служат субъектам и для универсал и заци и файловых и м е н (зам е н ы реал ьн ых с и мволов
в и м е н и и расширении файла универсал ьн ы м и , т. е. так и м и метас и м волам и , как " * "
и " ? " ) и для раскрытия переменных (зам е н ы пере м е н н ых их значениями). Например,
Часть l. Основы администрирования
226
$
$
I
$
I
mylang= " Pennsylvania Dutch "
echo " I speak $ { mylang } . "
s p e a k P e nn s y l va n i a Du t c h .
echo ' I speak $ { mylang } . '
s p e a k $ ( my l a n g ) .
Обратные апострофы (также известные как обратные галочки, левые кавычки, л е ­
вые одиноч н ы е кав ы ч ки ил и откр ы вающие кавычки) и нтерпретируются аналогично
двой н ы м кавыч кам , но несут при этом допол нител ьную нагрузку. Эта нагрузка состоит
в интерпретаци и содержимого такой строки, как команды оболочки , выполнении этой
команды и замене строки результатом выполнения этой команды.
$ echo " Тhere are ' wc - 1 < / etc/passwd " lines in the pas swd file . "
T h e r e a r e 2 8 l i n e s i n t h e p a s swd f i l e .
Перемен н ые окружения
П р и запус ке процесса U N I X он получает с п исок аргуме нтов командной стро к и ,
а также набор перем е н н ых окружения. Большинство оболочек показывают вам текущее
окружен ие в ответ на команду printenv:
$ printenv
E D I T OR
VI
U S ER = garth
EN\'
/ gome / g a r t h / . b a s h r c
L S COLORS
e x f x gx g x d x g x g x b x b x c x c x
PW D = /me g a / Docume n t s / P r o j e c t s / C o d e / s p l
HOl'IE = / home / g a r t h
. . . < t o t a l o f abou t 5 0 >
=
=
=
По соглаше н ию имена переменных окружения набираются пропис н ы м и буквам и, но
формально это не требуется.
П рограмм ы , которые вы запускаете, могут обращаться к этим перемен н ы м и соответ­
ствующим образом изменять их поведение. Н апример, программа vipw проверяет перемен­
ную среды E D I TOR, чтобы определить, какой текстовы й редактор будет работать для вас.
П ерем е н н ые окружения автоматически импортируются в пространство имен пере­
м е н н ы х sh, поэтому их можно установить и проч итать с помощью стандартного син­
такс иса. Чтобы превратить переменную оболочки в переменную среды, испол ьзуйте ко­
ма нду export имя_ переменной. Вы также можете комбинировать этот си нтаксис со
значение м прис ваи вания , как показано здесь:
$ export EDITOR = nano
$ vipw
< з а п ускае т р е д а к т о р n a n o >
Несмотря на то что они называются перем е н н ы м и окруже н и я , эти значения н е су­
ществуют в каком-то абстрактном месте вне пространства и вре м е н и . Оболочка пере ­
дает сн имок текущих значен и й в л юбую запущен ную вам и програм му, но при этом нет
н и каких открытых соеди н е н и й . Более того , каждая оболочка ил и программа и каждое
окно терминала имеют свою собстве н ную отдельную коп и ю окруже н и я , которая может
быть изменена отдельно.
Команды для переме н н ых окруже ния , которые вы хотите настроить во вре мя вхо­
да в систему, должны быть вкл юч е н ы в ваш файл � / . profile или � / . bash_p rofile.
Другие перемен н ые среды , такие как PWD для текущего рабочего каталога, автоматиче­
с к и поддерживаются оболоч кой.
Глава 7. Сценарии и командная оболочка
227
Ко м а нды фил ьт раци и
Л юбая корректная команда, которая считывает данн ы е и з канала STDIN и записы­
вает данные в канал STDOUТ, может испол ьзоваться в качестве фил ьтра (т. е . компонента
конвейера) для обработки дан н ых. В этом разделе мы кратко рассмотр и м некоторые из
наиболее широко испол ьзуемых команд фильтра, но список практически бесконечен .
Команды фильтрации отличаются настол ько с ил ьн ы м " коллекти визмом '' , что порой
даже трудно продемонстрировать их и ндивидуальное использование .
Большинство команд фильтра принимают одно или нескол ько и м е н файлов в ко­
мандной строке. Тол ько если вы не укажете файл , они прочитают дан н ы е из стандарт­
ного входного потока.
Команда cu t: раз бивка строк на поля
Команда cut в ыводит выбра н н ы е части входных строк. Она чаще всего в ыделяет
поля с раздел ител я ми , как в примере , показанном н иже , но также может возвращать
сегменты , определ я е м ы е гран и ца м и столбцов. Раздел ителе м по умолчан и ю служит
символ <ТаЬ> , но вы можете измен ить разделители с помощью опции -d. Параметр -f
определяет, какие поля включать в вывод.
П ример испол ьзования команды cut приведен н иже в разделе, посвященном коман­
де uniq.
Команда sort: сортир овка строк
Команда sort сортирует входные строки. Звучит просто, да? Хотя на самом деле не все
так безоблачно: существуют потенциальные н юансы, связанные с точно заданными частя­
ми сортируемых строк (т.е. с использованием сортировочного ключа) и порядком сортиров­
ки. Наиболее распространенные варианты применения этой команды показаны в табл. 7.2,
в отношении же остальных случаев обратитесь к соответствующей тап-странице.
Таблица 7 . 2 . Ключи команды sort
Ключ команды
-ь
-f
З начение
Игнорировать ведущие пробельные символы
Сортировать независимо от регистра букв
-h
Сортировать "читабельные" числа (например, 2Мб)
k
Указывать столбцы, которые формируют сортировочный ключ
-n
Сравнивать полR как целые числа
-
-r
Изменить порRдок сортировки на противоположный
-t
Установить разделитель полей (по умолчанию - пробельный сим вол)
-u
Выводить только уникальные записи
Н а при мерах приведе н н ых н иже команд демонстрируется различие м ежду ч исло­
вой и лексикографической сортировкой ( последняя действует по умолчани ю ) . В обеих
командах испол ьзуются ключ и - t : и - kЗ , З для сортировки файла /etc/group по е го
третьему пол ю ( в качестве разделителя испол ьзуется двоеточие), содержащему иденти ­
фикатор ( I D) групп ы . Первая команда реал изует числовую сортировку, а вторая - лек­
сикографическую (в алфавитном порядке) .
Часть 1. Основы администрирования
2 28
$ sort - t : -kЗ , З -n /etc/group'
root : x : O :
Ь i n : x : l : da emon
da emon : x : 2 :
$ sort - t : -kЗ , З /etc/group
root : x : O :
Ь i n : x : l : da emon
users : x : lO O :
Также полезна опция -h, реализующая ч исловую сортировку, которая пони мает суф­
фикс ы , такие как м мя мега и G мя ги га. Например, следующая кома нда правильно со­
ртирует размеры подкаталогов в каталоге /usr, сохраняя корректность вы вода.
$ du -sh /usr/ * 1 sort -h
l бК
128К
648К
1 5М
2 0М
1 1 7М
1 2 6М
8 4 5М
1 . 7G
/us r/locale
/ u s r / l oc a l
/ u s r / g ame s
/usr/ sЬin
/ u s r / i nc l ude
/us r / s rc
/ u s r /Ь i n
/us r / share
/us r / l ib
Команда uniq: вывод уникальных строк
Команда uniq по существу подобна команде sort -u, но у нее есть некоторые по­
лезн ые ключ и , которые команда sort не эмул ирует. Так, кл юч - с испол ьзуется мя под­
счета количества э кзе м пляров каждой строки , кл юч -d - для отображе ния тол ько
строк, име ющих дубликаты , а ключ -u - для отображения тол ько строк , н е имеющих
дубл и каты . При этом вход н ы е дан н ы е должны быть предварител ьно отсортирован ы ,
обычно путем " пропус кания " через команду sort.
Например, по результатам выполнения следующей команды видно, что 20 пользова­
телей в качестве стартовой оболочки используют / Ь i n / b a s h , а остал ьн ы е 1 2 - /Ьin/
false. ( Последн ий результат характерен л ибо для псевдопол ьзователе й , л ибо мя поль­
зователей, учетн ые записи которых были заблокирован ы . )
$ cut - d : -f7 /etc/pas swd 1 sort 1 uniq - с
2 0 /Ьin /ba sh
1 2 /Ьin / fa l s e
Команда wc: п одсчет строк, слов и символов
П одсчет кол ичества строк, слов и символов в файле - еще одна расп ространен н ая
операция , удобн ы м средством реал изации которой и я вляется команда wc ( word count) .
В ыполнен ная без каких-либо ключей, о н а выведет все три резул ьтата подсчета.
$ wc /e tc/pas swd
32 7 7 2 0 0 3 / e t c /p a s s wd
В контексте написания сценариев команду wc часто приме няют тол ько с одн и м из
кл юч е й ( - 1 , -w ил и - с ) , чтобы резул ьтат ее выполнения состоял из одного ч исла . Эту
форму чаще всего можно встретить внутри обратных апострофов, и тогда результат мо­
жет быть сохранен ил и испол ьзован по назначению.
н команда sort при н имает ключ -kЗ (а не -kЗ , З ) , но, вероятно, она не делает то, что вы ожидаете .
Без номера завершающего поля кл юч сортировки действует до конца строки .
глава 7. Сценарии и командная оболочка
229
Команда tee: коп иро вание входного п от ока в два места
Командны й кон вейер, как правило, действует пря мол и нейно, но зачастую полез­
но распараллелить поток данных, т.е . " перехватить" его и отправить коп ию в файл ил и
окно терминала. Это можно сделать с помощью команды t e e , которая отправляет свой
стандартный входной поток как в стандартн ый выходной канал , так и в файл , указа н ­
ный в командной строке . Представьте действие этой команды в виде тройн и ка в трубо­
проводе ( tee (ан гл . ) - тройник. - Примеч. пер. ) .
Устрой ство / de v / t ty м о ж н о сч итат ь с и н о н и м ом для те куще го тер м и н ал а .
Например, команда
$ find / -nаше core 1 tee /dev/ tty 1 wc - 1
выводит найденные путевые имена файлов c o r e и результат подсчета их количества.
Ч асто работа кон вейера с командой tee , выводя щей резул ьтаты и в файл , и в окно
терми нала (для проверки ) , занимает м ного времени. Вы можете понаблюдать за первы ­
ми результатами, чтобы убедиться в том , что все работает как надо, а зате м смело уходи­
те: результаты сохран ятся в файле.
Команды head и tail: чтение файла с на чала или с ко нца
П росмотр строк с начала или кон ца файла - обыч ная адм и н истративная операция.
Команды head и tai l отображают по умолчанию десять строк, но вы можете испол ьзо­
вать кл юч , задающий желаемое количество строк.
Для интеракти вного испол ьзования команда head уже нескол ько устарела, и вме­
сто нее ( в этом контексте) часто испол ьзуется команда les s , которая разби вает файл ы
для отображен и я по страницам. Однако команду head можно успеш но применять в сце­
нария х и с другой цел ью.
С командой ta i l ис пол ьзуется кл юч - f , котор ы й чрезвычайно полезен для с и ­
сте м н ых адм и н истраторов. Вместо не медл е нн ого завершен ия посл е вы вода требуемо­
го кол ичества строк команда tai l -f ожидает поступления новых строк, которые будут
добавл е н ы в конец файла, а затем вы веде ны по назначению, что оче н ь удобно для мо­
ниторинга журналов регистраци и . Однако следует и меть в виду, что программа, которая
реализует запись дан н ых в файл , может буферизи ровать свои выходные дан н ы е . Даже
есл и строки будут добавляться регулярно (с точки зрения логики) , они могут стать види ­
мыми только фрагментами объемом 1 или 4 КиБ.9
Команды head и tai l получают несколько имен файлов из командной строки. Даже
команда tail -f допускает испол ьзование нескол ьких файлов, и это довол ьно удобно;
когда появляются новые результаты , подлежащие выводу на экран , команда tail выво­
дит имя файла, содержащего эти резул ьтаты.
Для остановки процесса мон иторинга нажм ите комбинацию клавиш <Ctrl + C > .
Команда grep: по иск текста
При выполнении команды grep по мере просмотра входного текста выводятся стро­
ки, которые совпадают с задан ным образцом (шаблоном ) . Свое назван ие эта команда
получ ила " в наследство" от команды g / р е гул я р н о е выраже н и е /р) из старого (и ныне
действующего) редактора ed, испол ьзуемого в самых первых версиях U N IX.
" Ре гул я р н ы е выраже н и я " ( regular expressions) - это шаблон ы , предназначен н ы е
для поиска совпадающего с н и м и текста и написан ные на стандартном языке шаблонов.
_
" И нформаuию о еди н и цах измерения см . в разделе 1 .6 главы 1 .
Часть 1. Основы администрирования
230
Они представля ют собой универсальн ы й стандарт, испол ьзуемый большинством про­
грам м при поиске по совпаден и ю с шаблоном , хотя и с небольш и м и различиями в ре­
ализациях. Странное имя команды уходит своими корнями в оригинальные изыскан ия
соответствующих разделов теории вычислений. Более детал ьно си нтаксис регулярных
выражений рассматривается в разделе 7.4.
П одобно больш инству фил ьтров, команда grep и меет множество кл ючей . Например,
кл юч - с позволяет выводить количество совпавших строк, ключ - i служит для и гнори­
рования регистра букв при сопоставлении, а ключ v предназначен для вы вода отл ича­
ющихся (а не совпавших) строк. Оче н ь полезным является кл юч -1 ( пропис ная буква
" [;' ) , который заставляет команду g r e p вы водить только имена файлов, содержащие со­
впавш ие с шаблоном строки, а не все совпавшие строки.
Например, выполнение команды
-
$ sudo grep -1 mdadm /var/ log/ *
/va r / l og / a u t h . l o g
/va r / l og / s y s l o g . O
демонстрирует, что записи с именем утил иты mdadm нашлись в двух разл ичных файлах
системных журналов.
Команду grep можно сч итать классичес кой реал иза цией базового механизма ис­
пользования регулярных выражений, но в некоторых версиях предлагается выбор других
диалектов. Например, Linuх-команда grep -р служит для поиска выражений в стил е
языка Perl . хотя в справочных страницах можно найти н еопределенное предупрежден ие
о том , что такой вариант носит " экспериме нтальный характер" . Для пол ной уверенно­
сти в своих сценариях просто испол ьзуйте язык Ruby, Python или Perl.
Есл и вы ф ил ьтруете с помощью команд tai l - f и grep , то добавьте параметр
- - l ine -buffered, чтобы убедиться , что вы увидите каждую соответствующую строку,
как только она станет доступной
$ tail - f /var/ log/шessages 1 grep - - line-buffered ZFS
Ма у 8 0 0 : 4 4 : 0 0 n u t r i e n t Z FS : vdev s t a t e chan g e d , pool_
g u i d= l 0 1 5 1 0 8 7 4 6 5 1 1 8 3 9 6 8 0 7 vdev_g u i d = 7 1 6 3 3 7 6 3 7 5 6 9 0 1 8 1 8 8 2
7 3 НАПИСАНИЕ СЦЕНАРИЕВ ДЛЯ ОБОЛОЧКИ sв
.
.
Оболочка sh отл ично подходит для простых сценариев, которые автоматизируют то,
что вы в противном случае вводил и бы в командной строке. Ваш и навыки командной
строки переносятся на с ценарии sh, и наоборот, что помогает вам извлечь максималь­
ную отдачу от времени обучения. которое вы вкладываете в изучение оболочки sh. Но
как только сценарий sh получает более 50 строк или когда вам нужн ы фун кци и . кото­
рых нет в оболочке sh, приходит время переходить на язык Python или Ruby.
Для с ценариев есть см ысл ограничить себя диалектом , понятным исходной оболочке
Вoume, которая является стандартом I EE E и POS I X. Оболочки , совместимые с sh, часто
дополняют эту базовую линейку язы ковыми функциям и . Целесообразно применять эти
расширения, если вы делаете это намеренно и хотите использовать кон кретн ый и нтер­
претатор. Однако чаще всего сценарии в конечном итоге испол ьзуют эти рас ш ирения
непреднамеренно, и затем адм инистраторы удивляются , когда их сценарии не работают
в других системах.
Глава 7. Сценарии и командная оболочка
231
В частности , не предполагайте, что версией оболочки sh в ваше й системе всегда яв­
ля ется bash, ил и даже , что оболоч ка bash доступна. В 2006 году с истема U buntu заме ­
нила bash на dash в качестве интерпретатора сценариев по умолчан ию, и в рамках это­
го процесса преобразован ия был составлен удобн ы й список команд, за которы м и нужно
следить. Вы можете найти его на сайте wiki . uЬuntu . com/DashAsBinSh.
Выпол нение
В оболочке s h комме нтарии начинаются с о знака # и продолжаются до конца стро­
ки. Как и в командной строке, вы можете разбить одну логическую строку на несколько
физических строк, обозначи в переход на новую строку символом обратной косой черты
( \ ) . И, наоборот, можно поместить на одной строке несколько операторов, раздел ив их
точкой с запятой.
Сценарий для оболочки s h может состоять только из последовательности командн ых
строк. Н апример, следующий сценарий hel loworld просто выполняет команду echo .
# ! /Ь i n / s h
echo " H e l l o , wo r l d ! "
П ервая строка содержит сочетан ие символов # ! , которое означает, что данн ы й тек­
стовый файл я вляется сценарие м , предназначенн ы м для интерпретации командной обо­
лоч кой из каталога /Ьin/ sh ( которая сама может служить ссылкой на оболочку da sh
и bash) При принятии решения о том , как выполнить этот файл , ядро найдет соответ­
ствующий синтаксис. С точки зрения оболочк и , выполняющей этот сценар и й , пер вая
строка представляет собой просто ком ментарий.
Теоретически, если ваша оболочка sh находится в другом месте , вам придется отре­
дактировать первую строку. Тем не менее м ногие существующие сценарии предполага­
ют, что она находится в каталоге /Ьin/ sh, который с истемы вынужде ны поддержи вать,
хотя бы через ссыл ку.
Если вам нужен сценарий для запуска в оболочке bash или в другом интерпретаторе ,
который может не иметь одного и того же командного пути в каждой системе, вы може­
те испол ьзовать каталог /usr/Ьin/env для поиска перемен ной среды РАТН для опреде ­
лен ной команды. 1 0 Например,
# ! / u s r / Ь i n /env ruby
является распространенной идиомой для запуска сценариев на языке Ruby. П одобно ка­
талогу /Ьin/ sh, каталог /usr/Ьin/env является настол ько широко распростране н н ы м
вариантом, что все систем ы обязаны его поддерживать.
Для того чтобы подготовить этот файл к выполнению, достаточно установить его бит,
"отвечающи й " за выполнение (см. раздел 5.5).
$ chmod + х hel loworld
$ /helloworld' 1
•
He l l o , wo r l d !
' " П ои с к п утей и меет последствия для безопас ности , особе н н о п р и запуске сценариев в среде
sudo . Допол н ител ьную и нформац и ю об обработке переме н н ы х окружен и я в среде sudo с м . в
разделе 3 . 2 .
1 1 Есл и в а ш а оболочка п о н и мает команду he l l owo r l d без п рефи кса / , это означает, что в
вашем п ути поиска указан текущи й каталог ( . ) . Это плохо, п оскольку дает друг и м пол ьзователям
возможность устраи вать для вас ''ловуш к и " в н адежде , что в ы будете п ытаться в ы п ол н ить
определенные кома нды при переходе к каталогу, в котором он и и меют доступ д.1я зап иси .
.
232
Часть 1. Основы администрирования
Можно также н епосредстве нно запустить (активизировать) оболочку в качестве и н ­
терпретатора сценария.
$ sh helloworld
H e l l o , wor l d !
$ source helloworld
Hello, world !
Первая команда выпол н ит сценарий helloworld в новом экземпляре оболочки sh,
а вторая - заставит вашу начал ьную оболочку прочитать содержимое файла, а затем вы­
пол н ить его. Второй вариант полезе н в случае , когда сценарий устанавл и вает перемен­
н ые среды ил и выполняет другие операци и настройки , примен и м ы е тол ько к те кущей
оболоч ке. Обычно этот вариант испол ьзуется при написании с ценариев, включающих
содержимое файла конфи гурац и и , написанн ого в виде ряда присваива н и й знач е н и й
переме н н ы м . 1 2
m Дополнительную информаци ю о битах разрешения можно прочитать в разделе 5 . 5 .
Есл и вы пришл и из м ира Windows, то вам привычно испол ьзовать понятие рас ш и ­
р е н и я файла, по которому можно судить о т и п е файла, а также о том , можно л и е го
выпол н ить. В м ире U N IX и Linux признак того, может ли файл быть выполнен ( и если
да, то кем ) , содержится в специал ьных битах пол номоч и й . При желании вы можете на­
делить свои Ьаsh-сценарии суффиксом . sh, который бы напом инал вам об их тип е , но
тогда при выпол н е н и и соответствующей команды вам придется вводить суффи кс . sh,
поскольку UNIX не интерпретирует расш ирения специальным образом.
От кома нд к сценариям
Прежде ч е м переходить к особенностя м написания сценарие в дл я оболочки sh, оста­
новимся на методике этого процесса. Многие пишут эти сценарии так же , как на языке
Python ил и Ruby, т.е. используя какой- н ибудь текстовы й редактор. Однако удобнее рас­
с матри вать в качестве и нтерактивной среды разработки сценариев режи м с приглаше­
н ием на ввод команды .
Предположим , например, что у вас есть журнал ы регистраци и , именованные с суф­
ф и ксами . l o g и . LOG и разбросан н ы е по все й иерархической с истеме каталогов.
Допустим также, что вы хотите изменить эти суффиксы , переведя их в верхн и й ре гистр.
П режде все го, попытаемся отыскать все эти файлы .
$ find . -name ' * log '
. do - no t - t ou c h / impo r t a n t . l og
a dmi n . com- l o g /
foo . l og
g e n i u s / spew . l o g
l e a the r _ f l o g
Ой! П охоже на то, что нам надо включить в шаблон точ ку и при поиске и гнориро­
вать каталоги . Н ажм ите комбинацию клавиш < Ct rl + P > , чтобы верн уться в режим ко­
мандной строки , а затем модифи цируйте ее.
$ find . - type f -name ' * . l og '
. do - no t - t ou c h / imp o r t an t . l o g
f oo . l o g
1 2 С и н о н и мо м для команды s ource служ ит команда в в иде точ к и ( dоt-команда ) , н а п р и ме р
. helloworld .
Глава 7. Сценарии и командная оболочка
233
geni u s / spew . l o g
Отл ично, это уже выглядит л учше. П равда, каталог do -not- touch (т.е. " н е тро­
гать") вызывает смутное чувство тревоги; но мы можем избавиться от него.
.
$ find . - type f -name ' * . log '
1 grep -v . do -not- touch
foo . l o g
geni u s / spew . l o g
Прекрасно, м ы получили абсолютно точн ы й список файлов, которые должны быть
переименованы. Попробуем сгенерировать несколько новых имен.
$ find . - type f -name ' * . log ' 1 grep -v . do -not- touch 1 while read fname
> do
> echo mv $ fname ' echo $fname 1 sed s / . log/ . LOG/ '
> done
mv foo . l o g foo . LOG
mv geni u s / spew . l o g g e n i u s / spew . LOG
Да, это и менно те команды, которые позволят переименовать нужные файл ы . Как
же их выпол нить? Мы могл и бы снова вызвать уже выполненную команду и отредакти­
ровать команду echo, чтобы заставить оболочку sh выполн ять команды mv, а не просто
выводить их. Ведь передача команд в отдельную копию оболочки sh
более надежны й
вариант работы, который к тому ж е требует меньшего объема редактирования.
Нажав комбинацию клавиш < Ct rl + P > , мы обнаруживаем , что оболочка bash забот­
ливо свернула наш м и ни-сценарий в одну-единствен ную строку. К этой " уплотненной "
командной строке м ы просто добавляем канал , передаюший выходные данные команде
sh -х.
-
$ find . - type f -name ' * . log •
do echo mv $fname ' echo $ fname
grep -v . do-not- touch 1 while read fname ;
sed s / . log/ . LOG/ ' ; done 1 sh - х
+ mv f o o . l og f o o . LOG
+ m v geni u s / spew . l og g e n i u s / s pew . LOG
Ключ - х команды bash обеспечивает вывод каждой команды п еред ее выполнением.
М ы завершили переименование файлов, но нам хотелось бы сохранить этот сцена­
рий, чтобы испол ьзовать его с нова. Встроен ная в s h команда fc п о своему действию
во м ногом аналогична нажатию комбинации клавиш < Ct rl + P > , н о вместо возврата по­
следней команды в командную строку она передает команду в заданный вами редактор.
Добавьте в свой файл строку идентификацион ного комментария , поместите сохранен­
ный файл в приемлемый ДJIЯ вас каталог ( например, /Ьin ил и /usr/local /Ьin) , сде­
лайте файл исполняемым, и вы получите настоящий сценарий.
Итак, подытожим.
...
1 . Разрабатывайте сценарий ( ил и его часть) в виде конвейера команд, причем по­
шагово и в режиме выполнения командных строк.
2. Пересылайте резул ьтат в стандартн ы й выходной поток, проверяя п равильность
работы используемых вам и команд.
3. На каждом этапе используйте буфер ранее выполненных команд ДJIЯ их появле­
н ия в командной строке и и нструменты редактирован ия
ДJIЯ их модификаци и .
-
Часть 1 . Основы администрирования
234
4. П ока вы получаете не правил ьные результаты, можно сч итать, что вы, по сути ,
ничего не сделал и , и до тех nop, пока команды не заработают так, как надо, ниче­
го (из уже сделанного) не надо удалять.
5. Если результат выглядит правил ьн ы м , выполните команды на реал ьном примере ,
чтобы убедитьс я , •по все получ илось так, как ожидалось.
6. Испол ьзуйте команду fo, чтобы зафиксировать свою работу в редакторе , оформи­
те ее соответствующим образом и сохран ите.
В п р и веде н ном в ы ш е п ри мере мы вывел и командн ые строки , а затем направил и их
в подоболочку для выполнения. Этот метод не является универсально приме н и м ы м , но
часто оказы вается полезн ы м . В качестве ал ьтернативного варианта можно фиксировать
резул ьтаты , перенапрамяя их в фа йл . Терпеливо доби вайтесь получения нужн ых резул ь­
татов и , пока не увидите их, не вы полняйте н и каких потенциально деструктивн ых де й­
ствий .
Ввод и вы вод данн ы х
Команда eoho не отл и чается сложностью, но зато проста в применен и и . Для полу­
чения большего контроля над вы водом дан н ы х испол ьзуйте ком анду printf. Она не
очен ь удобна, поскол ьку п редполагает, что вы должны в явном виде указы вать в нуж­
н ых для вас местах символы перехода на новую строку ( \ n) , но позволяет испол ьзовать
с и м вол табуляции и другие средства форматирования резул ьтата . Сравн ите результаты
выпол н е н ия следующих двух команд.
$ echo 11 \ taa\ t.ЬЬ \ tcc\n "
\ t aa \ t bb \ t c c \ п
$ printf 11 \ taa\tЬb\tcc\n"
ЬЬ
се
аа
И ногда работа команд eoho и printf поддерживается на уровне операцион ной си­
стем ы (обычно соответствующие им исполняемые файл ы хранятся в каталогах /Ьin и
/usr/Ьin соответствен но) . Хотя эти команды и встрое нные в оболочку утилиты в целом
подоб н ы , о н и могут иметь незнач ител ьн ые отл и ч и я , особен но это касается команды
printf. Вы можете либо придерживаться sЬ-синтаксиса, л ибо вызывайте " вн е ш н юю"
команду printf, указы вая ее п олн ы й путь.
Для того чтобы сформ ировать для пользователя приглашение ввести дан н ые , можно
испол ьзовать команду r e a d .
# ! /Ьiп/sh
e ch o - п " Eп t e r y o u r пате :
r e a d u s e r пате
"
i f [ - п " $ u s e r _ пaтe " ] ; t h e n
e ch o " H e l l o $ u s e r_пaтe ! "
exit О
else
e ch o " G r e e t i пg s , пaтe l e s s опе ! "
exit 1
fi
Ключ -n в команде eoho п ода вляет привычный переход на новую строку, но здесь
была бы кстати команда printf. Мы еще рассмотрим вкратце синтаксис оператора if,
но е го действие здесь, с нашей точки зре н ия , очевидно. Кл юч -n в операторе if обе-
Глава 7. Сценарии и командная оболочка
235
спечит значение исти н ы , есл и е го строковый аргумент н е окажется н улев ы м . Вот как
выглядит результат выполнения этого сценария.
$ sh readexample
Ent e r y o u r n ame : Ron
H e l l o Ron !
Пробел ы в именах файлов
Именован ие файлов и каталогов, по существу, не регламентируется, з а исключением
того, что имена ограничены по длине и н е должны содержать косо й черты или нул и .
В частности , допус каются пробел ы . К сожалению, система U N I X и меет давнюю тради­
цию разделе н ия аргументов командной строки на пробел ы , поэтом у устаревшее про­
граммное обеспечение имеет тенденцию давать сбой , когда в именах файлов появляют­
ся пробелы .
П робелы в именах файлов был и обнаружен ы прежде всего в файловых системах, со­
вместно используе м ых с ком пьютерами Мае и персональн ы м и ком пьютерами, но те­
перь они внедрил ись в культуру U N IX и также встречаются в некоторых стандартных
пакетах программного обеспечения. Выхода нет: адми нистративные сценарии должны
быть готовы обрабатывать пробелы в именах файлов (не говоря уже об апострофах, звез­
дочках и различных других угрожающих пунктуационных метках).
В оболочке и в сценариях можно указывать имена файлов с п робелам и , чтобы дер­
жать их части вместе. Н апример, команда
$ less "Му spacey file"
считает файл Му spacey file в качестве единствен ного аргумента команды les s . В ы
также можете избежать отдельных пробелов с помощью обратной косой черты:
$ less Му\ spacey\ file
Фун кция заверш е н ия и м е н и файла большинства оболоче к (зачастую привязанная
к клавише <ТаЬ> ) обычно автоматически добавляет обратную косую черту. Когда вы пи­
шете с ценарии , полезн ы м оружием, о котором нужно знать, является опция -printO .
В сочета н и и с параметром xargs - 0 она делает комбинацию find /xargs коррект­
ной, независимо от пробелов, содержащихся в именах файлов. Например, команда
$ find / home-type f - s i ze + 1М -printO 1 xarqs -0 ls - 1
выводит на экран длинный список всех файлов в каталоге /home размером более одного
мегабайта.
Функци и и аргументы ком андной стро ки
Аргументы командной строки служат для сценария переменными с ч исловы м и име­
нами : $ 1
первый аргумент командной строки, $ 2
второй и т.д. Аргумент $ О со­
держит имя, по которому бьm вызван сценарий, например /Ьin/ example . sh, т. е . это
не фиксированное значение.
Переменная $ # содержит количество переданных аргументов командной строки ,
а перем е нная $ *
все эти аргументы. Ни одна из этих перем е н н ых не учитывает аргу­
мент $ 0 . Рассмотрим пример использования этих аргументов.
-
-
.
-
# ! /Ьin / sh
s how_u s ag e ( )
e c h o " U s a g e : $ 0 s o u r c e di r de s t d i r " 1 > & 2
Часть 1. Основы администрирования
236
exit 1
# Зд е с ь начин а е т с я о с н о в н а я программа
i f [ $ # -ne 2 ] ; t h e n
s h ow_u s a g e
e l s e # T h e r e a r e t w o a r gume n t s
i f [ -d $ 1 ] ; t h e n
s o u r c e_di r = $ 1
else
e c h o ' I nva l i d s o u r c e d i r e c t o r y ' 1 > & 2
s h o w_u s a g e
fi
if
-d $ 2 ] ; then
d e s t_di r = $ 2
else
echo ' I nva l i d de s t i n a t i o n di r e c t o r y ' 1 > & 2
s h o w_u s a ge
fi
fi
p r i n t f " S ou r c e d i r e c t o r y i s $ ( s o u r ce_di r } \ n "
p r i n t f " De s t i n a t i on d i r e c t o r y i s $ ( de s t_di r } \ n "
Есл и в ы вызываете сценарий без аргументов или с недействител ьны м и аргумента­
м и , сценарий должен вывести короткое сообщен ие об ош ибке , чтобы напомн ить вам ,
как е го испол ьзовать. В приведенном выше примере сценарий принимает два аргумен ­
та, подтверждает, что оба аргумента являются каталогам и , и выводит на экран их и ме­
на. Если аргументы недействител ь н ы , сценарий печатает сообщение об испол ьзовании
и выходит с н енулевым кодом возврата. Если вызывающий сценарий проверяет код воз­
врата, он будет знать, что этот сценарий не удалось выпол н ить правильно.
Мы создали отдельную функцию show u sage для печати сообщения об ис пол ьзо­
_
ван и и . Если впоследствии сценарий будет обновлен, чтобы принимать дополнительные
аргументы , сообщение об испол ьзовании должно быть изменено только в одном м есте.
Обозначение 1 > & 2 в строках, которые отображают сообщен ия об ошибках, выводит ре­
зультаты в поток SТDERR.
$ mkdir ааа ЬЬЬ
$ sh showusage ааа ЬЬЬ
S ou r c e d i r e c t o r y i s а а а
D e s t i n a t i on d i r e c t o r y i s ЬЬЬ
$ sh showusage foo bar
I nva l i d s ou r c e d i r e c t o r y
U s a g e : s howu s a g e s o u r c e_d i r de s t di r
Аргуме нты для функций оболоч ки sh рассматриваются как аргументы командной
строки. Первый аргумент
$ 1 и т.д. Как бьшо показано выше, $ О остается именем сце­
нария .
Ч тобы сделать пример более надежн ы м , м ы могл и бы заставить про грамму s h o w_
u s a g e получать в качестве аргумента код ошибки. Это позволит возвращать бол ее опре ­
дел е н н ы й код для каждого типа сбоя . Следующий фрагмент кода показы вает, как это
может выглядеть.
-
Глава 7. Сценарии и командная оболочка
237
show _ u s a g e ( ) {
e cho " U s a ge : $ 0 s o u r c e_di r de s t_di r " 1 > & 2
i f [ $ # -eq О ] ; then
e x i t 9 9 # E x i t w i t h a rb i t ra r y non z e r o r e t u r n code
else
exit $ 1
fi
В этой верси и подпрограм м ы аргумент не я вляется обязательным. Внутри с и м волы
$ # сообщают, с кол ько аргуме нтов б ыло передано. Если не указан более кон кретный
код, сценарий заканчивает работу с кодом 99. Однако конкретное значение, например
show_u s a g e 5
приводит к тому, что сценарий заверш ает работу после вывода сообщения об использо­
вании именно с этим кодом. ( Перемен ная оболочки $ ? содержит статус выхода послед­
ней выполненной команды, н езависимо от того , используется она внутри сценария или
в командной строке. )
В оболочке sh сильна аналогия между функциям и и командами. В ы можете опре­
делить полезн ые функции в файле � / . bash profile (�/ . profi l e для обы чной обо­
_
лочки sh), а затем использовать их в командной строке , как если бы они были команда­
м и . Например, если ваш сайт стандартизован на сетевом порту 7988 для протокола S S H
(форма "безопасность через безвестность") , вы можете определить функцию
s sh ( ) {
/ u s r / b i n / s s h -р 7 9 8 8 $ *
}
в каталоге � / . bash profi le, чтобы функция команда s sh всегда выполнялась с пара­
_
метрам и р 7 9 8 8 .
Как и м ногие оболочки, bash имеет механизм псевдонимов, который может воспро­
извести этот пример более точно, при этом функция становится все более уни версаль­
ной И МОЩНОЙ .
-
Поток упра вления
Выше в этой главе м ы уже рассмотрели несколько конструкций i f - t h e n и i f- t hen­
e l s e (они работают вполне ожидаем ы м образо м ) . Тер м и н аторо м ( признаком кон ца)
для оператора i f служит оператор f i . Для образования цепочки i f-операторов можно
испол ьзовать ключевое слово e l i f , означающее " e l s e i f " .
i f [ $ b a s e - e q 1 ] & & [ $ dm - e q 1 ] ; t h e n
i n s t a l l DMBa s e
e l i f [ $ b a s e -ne 1
$ dm - e q 1 ] ; t h e n
&&
installBase
e l i f [ $ ba s e - e q
$ dm - n e 1 ] ; t h e n
&&
i n s t a l l DM
else
e c h o ' == > I n s t a l l i ng n o t h i n g '
fi
Как и специальный [ ] -синтаксис для выполнения операций сравнения, так и " пара­
метрические" имена операторов целоч исленного сравнения ( например, -eq ) являются
наследием утилиты /Ьin / te s t из ран ней командной оболочки Сти вена Борна. В дей -
Часть 1. Основы администрирования
238
ствительности квадратные скобки - это не что иное, как условное обозначение вызова
утил иты tes t ; они не явля ются частью оператора i f . 1 3
В табл . 7 . 3 собра н ы операторы оболочки b a s h , позволя ющие сравни вать ч исла
и строки. В отличие от языка Perl , в оболочке bash используются текстовые операторы
для ч исел и символические операторы для строк.
Таблица 7.3. Элементарные операторы сравнения оболочки sh
Строки
Числа
=
х -eq
х
х
у
Истина, если
у
х -ne у
!= у
х -lt у
х < у
х <= у
х -le у
х >" у
х >= у
х -ge у
х -gt у
х равно у
х не равно у
х меньше у
х меньше или равно у
х больше у
х больше или равно у
-n х
х не равно значению n u l l
-z х
х равно значению nul l
" Здесь должна использоваться обратная косая черта или двойные квадратные скобки, чтобы предотвратить интер­
претацию символа > в символ перенаправления ввода-вывода.
В оболочке bash предусмотрен ы возможности оценки свойств файлов (снова-таки
как освобождение от наследства / Ь in / te s t ) . Н екоторые из операторов тестирован ия
и сравнения файлов приведе н ы в табл . 7.4.
Таблица 7.4. Операторы п роверки файлов оболочки sh
Оператор
Истина, если
- d фа йл
Файл файл существует и является каталогом
- е фа йл
Файл ф а йл существует
- f фа йл
Файл файл существует и является обычным
- r фа йл
У вас есть право доступа для чтения файла
- s фа йл
Файл файл существует и он не пустой
-w файл
У вас есть право доступа для записи в файл
фа йл l
- n t фа йл2
Файл файл l новее, чем файл2
файл l
-ot файл
Файл файл l старше, чем файл2
Несмотря на всю полезность формы e l i f , зачастую с точ ки зре н ия ясности про­
грам много кода лучше испол ьзовать структуру case. Н иже показан ее синтаксис на при­
мере функции, которая централизует процесс регистрации сценария . Кон кретные вари­
анты описываются закры вающи м и скобками после каждого условия и двумя точ ками
с запятой, завершающим и блок операторов, который должен быть выполнен при реали­
зации заданного условия. Оператор case завершается ключевым словом esac.
# Уро в е н ь пр о т околиро в ания у с т а н а вли в а е т с я в г л о б а л ь н ой
# переменной LOG_ LEVE L . Во зможные варианты п е р е числены в пор ядке
# от с амо г о с тро г о г о до наиме н е е с тро г о г о : E r ro r , W a r n i n g , I n f o и Debug .
l o gMs g {
me s s ag e l e ve l = $ 1
13Сейчас эти оnераuи и встроен ы в оболочку и уже не запускают на выполнение утилиту /Ьin/ test.
Глава 7. Сценарии и командная оболочка
239
me s s age_i t s e l f= $ 2
i f [ $ me s s a g e_l e v e l - l e $ LOG_LEVEL ] ; t h e n
c a s e $me s s a g e_l eve l i n
0 ) me s s a ge_l eve l_t e x t = " E r r o r " ; ;
1 ) me s s age_l e v e l _ t e x t = " W a r n i n g " ; ;
2 ) me s s a ge_l eve l_t e x t = " I n f o " ; ;
3 ) me s s a g e_l e v e l _t e x t = " Debug " , ,
* ) me s s a ge_l e v e l _t e x t = " Ot he r "
e s ac
e c h o " $ { me s s a ge_l evel_t e x t } : $me s s a g e_i t s e l f "
if
Эта функция илл юстрирует общеприн ятую паради гму "уровня р е гистр ации ( log
leve l ) , используемую м ногим и приложен и я м и адми н истр а ти в н о го характера. Код это­
го сценария позволяет генерировать сообщения на различных уровнях детализации, но
действительно регистрируются или отрабатываются тол ьк о те из н их, которые " прохо­
дят" глобал ьно устанавливаемый порог $ LOG LEVE L . Ч то бы прояснить важность каждо­
го сообщения, его текст предваряется меткой , опис ы вающей соответствующий уровень
регистрации.
"
_
Цикл ы
В оболочке s h конструкция f o r". i n позволяет упростить выпол н е н ие н екоторых
действи й для групп ы значений или файлов, особен но при ун и в е рс ал и за ци и файловых
име н , т.е . замене реальных с и м волов в и м е н и и рас ш ирении ун иверсальны м и ( напри­
мер, " * " и " ? " ) с целью формирован ия целых с п ис ков и м е н файлов. Шабл он * . s h
в приведенном н иже цикле f o r позволяет обработать целый список совпадающих с н и м
(шаблоном) имен файлов и з текущего каталога. О ператор f o r , проходя п о этому списку,
по очереди присваивает имя каждого файла перемен ной s c r i p t .
# ! / Ьi n / s h
s u f f i x=BACKU P - - ' da t e + % Y - %m- % d - % H % M '
f o r s c r i p t in * . s h ; do
n ewname= " $ s c r i p t . $ s u f f i x "
e cho " C op y i n g $ s c r i p t to $ ne wn ame .
ер -р $ s c r i p t $ newn ame
done
.
.
"
Вывод выглядит следующим образом:
$ sh forexample
Cop y i n g rhe l . s h to r h e l . s h . BACKU P - - 2 0 1 7 - 0 1 - 2 8 - 2 2 2 8 . .
Cop y i n g s l e s . s h to s l e s . s h . BACKU P - - 2 0 1 7 - 0 1 - 2 8 - 2 2 2 8 . .
.
.
В раскрытии имени файла нет ничего магического; в с е работает в точном соответ­
ствии с тем , как написано в командной строке . Другим и слова м и , с начала и м я файла
раскрывается (т. е . шаблон заменяется существующи м и м е н е м ) а затем обрабатывается
интерпретатором в развернутом виде . Имена файлов можно также вводить статически ,
как показано н иже :
,
f o r s c r i p t in r h e l . s h s l e s . s h ; do
240
Часть 1. Основы администрирования
В действительности любой список и м е н , содержащих пробел ьные символ ы ( включая
содержи мое переменной) , обрабаты вается как объект циклической конструкции f o r."
in. В ы также можете опустить сп исок пол ностью (вместе с кл ючевым словом i n) , и в
этом случае цикл неявно выпол няет итераци и по аргуме нтам командной строки сцена­
рия ( на верхне м уровне) или аргументы , переданные функци и :
# ! /Ьin/ s h
for file ; do
n e wn ame= " $ ( f i l e ) . ba c ku p "
e c h o " Co p y i n g $ f i l e t o $ n e wn ame . . . "
ер -р $ f i l e $ ne wn ame
done
Ц и кл ы в оболочке bash, в отл и ч ие от традиционной оболочки sh, ближе к циклам
из традицион ных языков програм мирования, в которых задается стартовое выраже н и е ,
и н крементация и условие окончания цикла. Например:
# ba s h - s p e c i f i c
f o r ( ( i = O ; i < $ C P U_COUNT ; i + + ) ) ; do
C PU_L I S T= " $ C PU_L I ST $ i "
done
Н а примере следующего сценария иллюстрируется цикл wh i l e , который часто при­
меняется д11 Я обработки аргуме нтов командной строки и чтения строк файла.
# ! /Ьin/ s h
ехес
0<$ 1
c o un t e r= l
wh i l e r e a d l i ne ; do
e ch o " $ coun t e r : $ l in e "
c o un t e r = $ ( ( c o un t e r + 1 ) )
done
Вот как выглядит результат выполнения этого сценария .
$ s h whi leexample /etc/pas swd
1 : r o o t : x : O : O : S u p e r u s e r : / ro o t : / Ь i n / b a s h
2 : Ь i n : x : l : l : Ьi n : / Ь i n : / Ь i n / b a s h
3 : da emon : x : 2 : 2 : Da emon : / s Ь i n : /Ьi n / b a s h
В этом сценарии есть интересные особенности. Оператор е х е с переопределяет стан­
дартный выходной поток сценария так, чтобы входные данные считывались из файлов,
имена которых должны определяться в соответствии с первым аргументом командной стро­
ки. 14 Если окажется, что такой файл не существует, данный сценарий сгенерирует ошибку.
Оператор r e a d в конструкци и wh i l e на самом деле я вляется встрое н н ы м в оболоч ­
ку, но действует подобно внешней команде . В н е ш н ие команды можно также помещать
в конструкцию wh i l e . Цикл wh i l e в такой форм е заверш ится тогда, когда внешняя ко­
манда возвратит ненулевое значение кода завершения.
Выражение $ ( ( coun t e r + + ) ) выглядит несколько странно. Обознач ение $ ( ( ... ) ) го­
ворит о вычислении выражения. Кроме того, оно делает необязател ьным использован ие
148 зависимости от вызова, оператор ехес может и меть и такое значение: "Остановить этот сценари й
и передать управлен и е другому сценарию или выраже н и ю " . В этом состоит еще одн а странность
оболочки : доступ к обеи м упомянутым здесь функциям реализуется через оди н и тот же оператор.
Глава 7. Сценарии и командная оболочка
241
символа $ дr1я обозначе н ия имен пере м е н н ых. Это выражен ие заменяется результатом
арифметического вычисления.
Обозначение $ ( ( ... ) ) применяется также в контексте двойн ы х кавычек. В оболочке
bash, поддерживающей оператор постинкрементаци и из языка С + + , тело цикла можно
свернуть в одну строку
wh i l e r e a d l i n e ; do
e c h o " $ ( ( coun t e r + + ) ) : $ l i n e "
done
А рифмети ка
Все пере м е н н ы е в оболочке sh представляют собой строковые значен и я , поэтому
оболочка sh не делает различия в п рисваиваниях между ч и слом l и с и м вольной стро­
кой " 1 " Различие состоит в использовании переменн ых. Следующий код иллюстрирует
это различие.
.
# ! /Ьin /sh
a=l
Ь=$ ( ( 2 ) )
с=$ а + $ Ь
d=$ ( ( a + Ь ) )
echo " $ а + $ Ь = $ с \ t ( p l u s s i gn a s s t r i n g l i t e r a l ) "
echo " $ а + $ Ь = $ d \ t ( p l u s s i gn a s a r i t hme t i c addi t i on ) "
Этот сценарий выводит следующий результат.
1 + 2
1 +2
1 + 2 = З
=
( p l u s s i gn a s s t r i ng l i t e r a l )
( p l u s s i gn a s a r i t hme t i c addi t i o n )
Обратите внимание н а то, что знак " пл юс " в присваивании пере м енной $ с н е рабо­
тает как оператор конкатенации дr1я строк. Он остается всего лишь л итеральным симво­
лом , так что эта строка эквивалентна следующей.
с= " $ а + $ Ь "
Для того чтобы выполн ить выч исления, необходимо заключить выражение в двой­
ные с кобки : $ ( ( ... ) ) , как показано выше в присваивании переменной $d. Однако даже
эта мера предосторожности не позволяет получить в переменной $ d ч ислового значе ­
ния; это значение по-прежнему хранится в виде строки " 3 " .
В оболочке s h реализован обы ч н ы й ассортимент операторов: арифметических, логи­
ческих и отношений ( подробнее см. соответствующие mаn-страницы).
7 4 РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ
.
.
Как м ы уже упоминал и в разделе 7 . 2 , регулярные выражен ия являются стандартизо­
ван н ы м и шаблонам и , которые анал изируют и манипулируют тексто м . Например, регу­
лярное выраже ние
I s e n t you а che ( que l c k )
for t h e g r [ a e ] y- c o l ou ? r e d a l umi n i ? um .
соответствует предr1ожен ия м , испол ьзующим л ибо американские , либо британские ор ­
фографические правила.
Часть 1. Основы администрирования
242
Регулярные выражения поддержи ваются большинством современных языков, хотя
одни языки " принимают их ближе к сердцу" , чем другие. Они также используются в таких
UN IХ-командах, как grep и vi . Регулярные выражения настолько распространены, что их
название в оригинальной литературе часто сокращали до слова " regex" (regular expressions).
О том , как испол ьзовать их немалые возможности, написаны уже целые книги. 1 5
Сопоста вл е н ие и м е н файлов и их раскрыти е , выполненное оболоч кой в п роцессе
интерпретации таких командн ых строк, как wc -1 * . pl , не является формой сопостав­
ления с регулярным выражением. Это совсем другая система, именуемая "универсал и ­
зацией файловых имен с помощью оболочк и " (shell globblng) , в которой ис пол ьзуется
другой, причем более простой , си нтаксис.
Сами по себе регулярные выраже н ия не явля ются частью языка написания сцена­
риев, но они настол ько полезн ы , что заслужи вают подробного расс мотре ния в л юбом
обсужден и и "сценарной" тем ы , а уж тем более в этом разделе.
П роцесс со п оста вления
Код, который испол ьзует регулярное выражен ие , пытается сопоставить одну задан­
ную текстовую строку с одн и м заданным шаблоном . Сопоставляе мая текстовая строка
может иметь оче н ь бол ьшой размер и содержать встроенные символы перехода на но­
вую строку. Зачастую регулярное выражение удобно испол ьзовать для сопоставления
с содержимым целого файла или документа.
Для того чтобы механизм сопоставления мог доложить о благоприятном исходе , ша­
блон поиска должен целиком совпасть с непрерывной областью исследуемого текста. При
это м шаблон может совпасть в любом месте исследуе мого текста. Обнаружив успешное
совпадение, вычислител ь возвращает текст совпадения в месте со с п иском совпаде ний
дл я л юбых частей ( подразделов) шаблона, ограниченн ых специальным образом.
Л и терал ьные символы
В обще м случае символ ы регулярного выраже н ия при сопоставле нии должны соот­
ветствовать сам и м себе . Так, шаблон
I
arc
the wa l ru s
совпадает с о строкой " 1 am t h e wal rus" и только с этой строкой . Поскол ьку совпаде н ие
может быть обнаружено в л юбом месте исследуе мого текста , этот ш аблон может дать
успешный резул ьтат совпаден ия со строкой
I
аш
t h e e g g rnan . I arn t h e w a l r u s .
Коо koo k a - c hoo !
Однако реал ьное совпадение огран ичено фрагментом " 1 am the walrus". П роцесс сопо­
ставления чувствителен к регистру букв.
С п ециал ьн ые символ ы
В табл . 7 . 5 собран ы значения некоторых распространенных специальных с и м волов,
которые могут испол ьзоваться в регулярных выраже ниях ( вообще , этих спе циал ьн ых
с и м волов гораздо бол ьше).
М ногие такие спе циал ьные конструкци и , как + и 1 , оказы вают вл и я н и е на сопо­
ставление подстрок сле ва или справа. В общем случае подстроку может составлять оди н
символ , или " подшаблон " , заключенный в круглые скобки , или класс сим волов, заклюi ; Ссьшки на литературу приведен ы в кон це главы.
Глава 7 . С ценарии и командная обол очка
243
ченный в квадратные скобки. Однако дпя символа 1 " подстрока распространяется нео­
граниченно как влево , так и вправо. Если вы хотите огранич ить область действия верти­
кальной черты, заключите ее и обе подстроки в их собствен н ы й набор круглых с кобок.
Н апример, ш аблон
"
I am t h e
( wa l r u s l e g g man ) \ .
Таблица 7 . 5 . Распространенные специальные символы регулярных выражений
Символ
С чем совпадает или что делает
.
Совпадает с любым символом
[ симв олы ]
Совпадает с любым символом из заданного набора
[ л символы ]
Совпадает с любым символом не из заданного набора
л
Совпадает с начал ом строки
$
Совпадает с концом строки
\w
Совпадает с любым алфавитно-цифровым символом (аналогично набору [ А- z а z О- 9 _ J )
\s
Совпадает с любым пробельным символом (аналогично набору [ \ f \ t \n \ r J ) •
\d
Совпадает с любой цифрой (аналогично набору [ 0 - 9 J )
-
1
.
. .
.
.
.
-
-
·-
- ·
Совпадает с элементом либо слева, либо справа
( выра жение )
Ограничивает область действия, группирует элементы, позволяя формировать группы
совпадений с "захватом" и без "захвата"
?
Позволяет одно повторение (или ни одного) предшествующего элемента
. . • . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . • . • . . . . . . . . • . . . .. . . . • . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . • . . . . • .
*
Позволяет множество повторений (или ни одного) предшествующего элемента
+
Позволяет одно или больше повторений предшествующего элемента
{ n}
Ровно n повторений предшествующего элемента
{ mi n ,
Не менее m i n повторений (обратите внимание на запятую)
{ mi n , ma x )
Любое число (от m i n до max) повторений
"Пробел, символ прогона страницы , табуляции, новой строки или возврата каретки.
даст совпадение либо со строкой 1 am the walrus. " , либо со строкой " 1 am the egg man. ". Эrот
пример демонстрирует также способ "экранирования" специальных символов (в данном слу­
чае точки) с помощью обратной косой черты ( \ ) . Шаблон
"
( I am t h e
( wal r u s l e gg man ) \ . ? ) { 1 , 2 )
совпадает со всем и последующим и строками.
•
1 am the wal rus.
•
1 am the egg man.
•
1 am the walrus. 1 am the egg man.
•
1 am the egg man. 1 am the wal rus.
•
1 am the egg man. 1 am the egg man.
•
1 am the wa\rus. 1 am the walrus.
Приведе н н ы й выше шаблон также совпадет со строкой " 1 am the walrus. 1 am the egg
man. 1 am the walrus. " , хотя количество повторений явно ограничено ч исло м два. Дело
в том , что шаблон не обязательно должен совпадать полностью с исследуе м ы м текстом .
В дан ном случае после обнаружен ия совпадений этого регулярного выражения с двумя
предпожениями дал ьнейшее его сопоставление прекратилось с объя влением об успеш-
Часть 1. основы администриравания
244
ном заверше н и и . П осле выполнения условия , задан ного в регулярном выраже н и и , уже
не важно, что в данном тексте есть е ще одно совпадение с шаблоном .
Ч асто м етас и м вол регулярного выраже н и я " * " ( квантификатор, равный нул ю или
бол ьше нуля) путают с с и м волом " * " , испол ьзуе м ы м командной оболоч кой для у н и ­
версал изации файловых и м е н . В с исте ме регулярных выражений используйте метас и м ­
вол " * " в случае, если для совпаде н и я приемлема любая последовательность с и м волов
(вкл ючая их отсутствие).
П римеры испол ь зования регулярн ых выражений
В С Ш А почтовые индексы (ziр-коды) имеют либо пять цифр, л и бо пять цифр с по­
следую щ и м тире и еще четырьмя цифра м и . П ри созда н и и ре гулярного выраже н и я
для ziр-кода необходи м о обеспечить сопоставление пятизнач ного номера. Следующее
ре гулярное выражение отвечает всем этим требован ия м .
Л \d { 5 } $
С и м волы и $ сопостамя ются с началом и кон цом обрабатывае мого те кста, не со­
ответствуя при этом реальн ым с и м волам в тексте ; они предстамяют собой "утвержде ­
ния нулевой дл и н ы " (т. е . это не с и м вол ы , а л и ш ь " пози ц и и " в тексте) . Эти с и м вол ы
гарантируют, что только те текстовые строки, которые состоят ровно из пяти цифр,
должны совпадать с регулярным выражением (строки большей дл и н ы не должны давать
совпадения). Сочетание сим волов \d обеспечи вает совпаде н ие с цифрой , а квантифика­
тор ( 5 } выражает требование совпадения ровно пяти цифр.
Для того чтобы можно было выявить л ибо пятизнач ный почтовы й индекс , либо рас­
ш ире н н ы й ziр- код (zip+4) , добавим в качестве необязательной части тире и четыре до­
полн ительные цифры.
л
Л \d { 5 } ( - \d { 4 } ) ? $
Круглые скобки объединяют в группу тире и допол н ител ьные цифр ы , чтобы они
считал и с ь одной н еобязател ьной еди н и це й . Например, это регулярное в ыражен ие
не даст совпаде н и я с пятизначн ы м почтовым индексом , за которым следует " голое"
тире (без последующих цифр). Если тире существует, также должно существовать четы­
рехзнач ное рас ш ирение, в проти вном случае совпадение зафикс ировано не будет.
Рассмотри м классический пример использования регулярного выражения.
M [ ou ] ' ? am+ [ a e ] r ( [ AE a e ] l [ - ] ) ? [ GKQ ] h ? [ a e u ] + ( [ dt z ] [ dh z ] ? ) { 1 , 2 } a f [ i y ]
О но дает совпаде н и я со м ноги м и варианта м и произноше н ия и м е н и бывшего л идера
Л и ви и Муам мара Кадда фи ( Moammar Gadhafi) , например с таки м и , как:
•
M uammar al - Kaddafi
( В ВС);
•
Moammar Gadhafi
(Associated Press);
•
Muam mar al - Qadhafi
(Al-Jazeera);
•
Mu'am mar Al- Qadhafi
( U . S . Depanment of State).
Вы пони маете , почему каждый из при веде н н ы х вариантов ус пе ш н о совпал с шаб­
лоном? 16
П р и веден ное выше ре гулярное выраже ние также иллюстрирует, наскол ько быстро
могут быть достигнуты пределы удобоч итае мости . М н огие систе м ы регулярных выра1 6 0братите в н и ман и е : это ре гул ярное выраже н и е должно быть ги бк и м при сопоставлен и и .
М ногие шаблон ы , которые не я вля ются закон н ы м и написания ми , также соответствуют шаблону:
напри мер, " Mo'ammer е\ Qhuuuzzthaf'.
Глава 7. Сценарии и командная оболочка
245
жен и й (включая испол ьзуемую в Perl) поддерживают опцию х , которая игнорирует ли­
теральные пробельные сим волы в шаблоне и легити м изирует ком м е нтарии, разрешая
" растягивать" шаблон и располагать е го на нескольких строках. Затем вi.1 можете ис­
пользовать пробел ьные символы мя выделения логических групп и " прояснения отно­
шений" между ними подобно том у, как это делается в процедурн ых языках.
М [ ou ] ' ? а m+ [ ае ]
\s
(
[ А Еа е ] l
[-\s]
)?
[ GKQ ] h ? [ ae u ] +
(
[ dt z ] [ dh z ] ?
)+
af [ iy ]
r
# Имя : Mu ' amma r , Moama r и т . д .
# Пробель ный , н о н е литераль ный п р о б е л
# Груп п а для н е о б я з а т е л ь н о г о пре ф и кс а - фамилии
Al , E l , a l или e l
#
Тире или пробел
#
#
#
#
#
#
Началь ный слог фамилии : Kh a , Qua и т . д .
Группа для с о г л а сных в начале 2 - г о сло г а
dd, dh и т . д .
Группа мож е т в с т ре ч а т ь с я д в а жды
Последний о п е р а т ор a f i или a f y
Такой способ описания регулярного выражения , вероятно, слегка облегчит пон и ма­
ние, но все же и он в состоян и и замучить поте нциальных ч итателе й . П оэтому луч ш е
испол ьзовать иерархический подход и строить м н ожество небольших сопоставл е н и й
вместо попытки описать в с е возможные с итуации в одном огромном регулярном в ы ­
ражении.
Захват ы
В случае есл и совпаде н и е происходит, каждый н абор круглых с кобок становится
" группой захвата" , которая фикс ирует реально совпавший те кст. То, как и менно эти
элементы становятся доступными мя вас , зависит от конкретной реализации и контек­
ста. В большинстве случаев доступ к результатам можно получить в виде списка или по­
следовательности пронумерованных переменных.
Поскольку кругл ые с кобки могут быть вложен н ы м и , как узнать, чему соответствует
каждое совпадение? Ответ простой: совпадения выстраиваются в результате в том же по­
рядке , в котором располагаются открывающие скобки . Количество " захватов" равно ко­
личеству открывающих скобок, н езависимо от роли (ил и ее отсутствия ) , которую и гра­
ла каждая взятая в с кобки группа в реал ьном совпадении. Если взятая в скобки группа
не используется (например, при сопоставлении регулярного выражен и я Mu ( ' ) ? amma r
со строкой " Muammar") , соответствующий " захват" будет пустым .
Если обнаружится несколько совпадений груп п ы , в качестве результата возвращается
содержимое только последнего совпадения. Например, при шаблоне
( I am the
( wa l r u s l e gg man ) \ . ? ) { 1 , 2 )
и таком варианте обрабатываемого текста
I am t h e e g g man . I am t h e wa l ru s .
существуют два результата (по одному мя каждого набора круглых скобок).
I am t h e wa l ru s .
wa l r u s
Обратите внимание н а то, что обе захваченные групп ы в действительности совпал и
дважды. Однако был захвачен тол ько последний текст, совпавш и й с каждым набором
круглых скобок.
246
Часть 1. Основы администрирования
Ж адность, леность и катастрофический поиск с возврато м
Регулярные выраже н ия сопоставляются сле ва направо. Если каждый компонент ша­
блона перед переходом к следующему ком поне нту стрем ится " захватить'' максимал ьно
возможную строку, то такая характеристика поведения называется жадностью (greediness).
Если анализатор реrулярн ых выражений достиrает состояния. из которого сопоставле­
ние выпол н ить уже невозможно, он немного "откатывается " назад от кандидата на совпа­
дение и заставляет одного из "жадных" компонентов отказаться от части текста. Например,
рассмотрим регулярное выражение а* а а применительно к входному тексту "аааааа" .
Вначале анализатор присваивает весь входной текст ком поненту а * , поскол ьку этот
ком понент является "жадн ы м " . Когда окажется , что больше букв "а" не осталось, ана­
лизатор перейдет к поиску совпаде н и й со следующим ком поне нтом ре гулярного вы­
ражен и я . Поскол ьку и м я вляется а и во входном тексте больше нет ничего , что мож­
но было б ы сопоставить с а , пора делать "откат" . Ком понент а * вынужден отказаться
от одной из букв "а" , с которы м и уже было зафиксировано совпадение.
Теперь анализатор может сопоставлять компонент а* а , но он по-прежнему не может это
сделать для последней буквы "а" в шаблоне. Поэтому он снова откатывается и "отнимает"
вторую букву "а" из "добычи" ком понента а * . На этоr раз вторая и третья буквы "а" в ша­
блоне имеют буквы "а" для фиксации совпадения , и на этом обработка текста завершена.
Этот п ростой пример илл юстрирует н екоторые важные общие моменты. П режде
все го , " жадное" сопоставл е н и е с "отката м и " делает использование таких простых ша­
блонов, как < i m g . * > < / t r > , дороги м удовол ьствием при обработке целы х файлов. ' 7
Действие порции . * начи нается с сопоставления всего содержимого от первой найден­
ной подстроки < img до кон ца входного текста, и только благодаря повторным откатам
область поиска сузится, чтобы " подобраться " к локальны м тегам.
Более того, порция > < / t r > , с которой с вязан этот шаблон , - это последнее возмож­
ное допустимое вхождение искомого элемента во входном тексте , что, наверняка , совсем
не отвечает ваш и м намере н и я м . Вероятно , вы хотели отыскать совпадение с подстро­
кой < img > , за которой следует тег < / t r > . Тогда лучше переписать этот шаблон в виде
< i mg [ " > ] * > < / t r> , что позволит распростран ить совпадение с начал ь н ы м и групповы­
м и с и м вола м и только до кон ца текущего тега благодаря явно задан ной невозможности
пересечь гра н ицу, обозначенную правой угловой с кобкой.
Можно также использовать "ле н и вые" ( в противоположность "жадны м " ) оператор­
ные выражения: * ? вместо * и +? вместо +. Эти варианты квантификаторов ограничива­
ют кол ичество вхожден и й искомых символов во входном тексте до минимально возмож­
ного. Во м ногих с итуациях эти операторы работают эффективнее и дают резул ьтаты .
более близкие к желае м ы м , ч е м "жадные" варианты.
Однако обратите в н и м а н и е на то , что "ле н и в ы е " квантифи катор ы ( в отл ич и е
о т " жад н ых " ) могут давать разл и ч н ы е совпаде н и я ; разн и ца состоит не просто в и с ­
пользуемой реализации. В н а ш е м НТМ L-примере "ленивый" шаблон выглядел бы так:
< img . * ? > < / t r > . Но даже в этом случае эле мент . * ? мог бы стать причиной внесения
в резул ьтат ненужн ых нам сим волов " > " , поскол ьку следующим после тега < img > может
быть не тег < / t r> . А такой результат вас , скорее всего, не устроит.
17Несмоrря на то что в этом разделе в качестве примеров обрабатываемого текста показаны фрагменты
НТМL-кода, регулярные выражен ия - не самый подходя щий и н струмент в дан ном случае (что не
п реминули отметить и наши рецензенты) . Языки Ruby и Pythoп имеют прекрасные расширени я ,
которые анализируют НТМ L-документы надлежащи м образом . Вы можете получить доступ к
и нтересующи м вас п орциям с помощью Xpath- ил и СSS-селекторов. Подробнее о модульных
ре позиториях соответствующих языков можно узнать, обратившись к стра н и це В и к и п еди и ,
посвященной языку запросов Xpath (XM L Path Language) и соответству ющим модулям в репозиториях.
Глава 7. Сценарии и командная оболочка
247
Ш аблон ы с нескол ь ки м и секци я м и гру пповых с и м волов могут " с п ровоцировать"
анал изатор регулярных выраже н и й на экспоненциальное поведен и е , особе н но в случае ,
есл и порции те кста могут совпадать с нескол ьки м и шаблон н ы м и выраже н и я м и , и те м
более в случае , если иском ы й текст в действител ьности не соответствует шаблону. Эта
ситуация не я вл яется такой уж необычной , как может показаться , глав н ы м образо:-.�
тогда , когда ш аблон сопоставляется с НТМ L-кодом . Очень часто вам придется искать
конкретн ые теги , за котор ы м и следуют другие те ги, возможно, раздел е н н ы е третьи м и
тегам и , и так далее, одн и м словом , вам придется создавать задание, которое потребует,
чтобы анализатор проверил массу возможных комбинаций.
Большой специалист в области ре гулярных выраже н и й Я н Гойвертс (Jan Goyvae rts)
называет этот эффект катастрофическим откатом (catast rophic backtracking) и оп исыва­
ет его в своем блоге (за подробностя м и и н екоторыми уда ч н ы м и реше н и я м и обращай ­
тесь по адресу: r e g u l a r - e x p re s s i on s . i n f o / c a t a s t r o p h i c . h t m l ) .
Из всего сказанного выше можно сделать такие выводы .
•
•
•
Есл и вы можете организовать построчное сопоставл е н ие шаблона, а н е пофа й ­
ловое (т.е. с просмотром сразу всего файла) , знач ит, вы значител ьно умен ьш аете
риск получения, мягко говоря , н изкой производительности.
Несмотря на то что ре гулярные выражен и я я вля ются " жадн ы м и " по умолчан ию,
вам , скорее всего, такие не нужны . Используйте "ленивые" операторы .
Все экзем пляры специальных с и м волов " . * " по существу подозрительны и долж­
н ы быть тщательно исследова н ы .
7 5 П РОГРАММИРОВАНИЕ НА ЯЗЫКЕ РпноN
.
.
Python и Ruby
и нтерпретируе м ые я з ы к и с выраже н н ы м объе ктно-ориентирова н ­
н ы м уклоном. Оба о н и ш и роко испол ьзуются в качестве языков сце нариев общего на­
значения и имеют обширные библиотеки сторо н н и х модулей. М ы обсудим Ruby более
подробно в разделе 7 .6.
Я з ы к Python предлагает простой синтаксис, которы й обычно довол ьно л е гко отсле ­
живать, даже п р и чте н и и кода других людей .
М ы рекоме ндуе м в с е м с исте м н ы м адм и н истраторам с вобод н о владеть я з ы ко :\-1
Python. Это оди н из луч ш их среди современ н ых языков систем ного адм и нистрирования
и обще го назнач е н и я . О н также ш ироко поддержи вается в качестве связующе го сред­
ства для использования в других системах ( например, в базе дан н ых Postgre S Q L и среде
разработки Xcode от Apple). Он отлично взаимодействует с и нтерфейсом прикладного
програ м м ирова н и я REST и и м еет хорошо разработа н н ы е библ и оте ки для м а ш и н ного
обуч е н и я , анализа данных и выч исле н и й .
-
Ст р асти по Python 3
Pyt hon уже ус п ел стать ос новн ы м я з ы ком н а п исан и я сце н а р и е в в м ире , когда
в 2008 году поя вилась версия Python 3. В этой верс и и разработч ики реш ил и отказаться
от обратной совместимости с Python 2, чтобы можно было реал изовать группу скром ­
ных, но фундаме нтальных изме н е н и й и исправл е н и й в языке, особен н о в области и н ­
тернационал изирован ной обработки текста. 1 8
1 кточн ы й с п и сок изменен и й в верс и и Python 3 не я вляется предметом нашего обсужде н и я . н о в ы
можете найти и х описание на стран и uе docs . python . org/ З . O /whatsnew/ 3 . О . htшl .
Часть 1. Основы администрирования
248
К сожалению, разверты вание верси и Python 3 потерпело фиаско. Обновл е н ия языка
были впол н е разум н ы м и , но не обязательн ы м и для среднестатистического програ м м и ­
ста н а Python с существующей базой поддерживаемого кода. В течен и е дол гого време­
н и разработч ики с ценариев избегал и испол ьзования Python 3 , потому что их л юбим ы е
библ иотеки не поддерживал и е го, в т о вре мя как авторы библиотек не поддерживал и
Python 3, потому что и х кл иенты все еще испол ьзовали Python 2 .
Даже в сам ых благоприятн ых обстоятел ьствах трудно подтолкнуть большое и взаи­
мозависимое сообщество пользователей к такого рода разры ву. В случае Python 3 борьба
шла в течение большей части десятилетия. Одн ако по состоян и ю на 20 1 7 год эта ситуа­
ция, по-видимому, меняется.
Библ иоте ки совместимости , которые позволяют одному и тому же Python- кoдy ра­
ботать в л юбой верси и языка , в какой-то сте п е н и облегч ил и переход. Н о даже сейчас
версия Python 3 остается менее распространенной, чем Python 2.
На момент написания этой статьи книги руЗ r e a d i ne s s . org сообщает, что только 1 7
из 360 луч ш их библиотек Python остаются несовместимыми с Python 3 . Однако дл и н н ы й
хвост непереноси мого програм м ного обеспечения хорошо отрезвляет: тол ько н е многим
более 25% библ иотек, хран ящихся н а сайте p yp i . p y t h o n . org ( и ндекс Python Package ,
или PyPI) работает под управлением версии Python 3 . 1 9 Конечно, м ногие из этих п роек­
тов устарели и бол ьше н е поддерживаются , но 25% по-прежнему является относительно
небол ь ш и м числом.
Python 2 ил и Python З?
Замедл е н н ы й переход привел к тому, что версии Pythons 2 и 3 стали рассматриваться
как отдел ьн ые язы ки. Вам не нужно делать взаимоисключающий выбор - в л юбой си­
стеме можно запус кать обе версии одновременно без конфл иктов.
Все наши илл юстративные систе м ы устанавливают версию Python 2 по умолчанию,
обычно как /usr/Ьin/python2 с символической ссьmкой из /usr/Ьin/python. Python 3
может быть установлен как отдельн ы й пакет; двоичн ы й код н азывается pythonЗ.
RHEL
П роект Fedora работает н ад те м , чтобы сделать Python 3 с вое й верс и ­
ей по умолчан и ю , а систе м ы R e d H at и Cent O S н а м ного отстают и даже
не определя ют п редварител ьно построен н ый пакет для верс и и Python 3 .
Однако вы м ожете выбрать оди н из ре п озитор и е в E P E L Fedora ( Ext ra
Packages for Enterprise Linux) . Для пол учения инструкций по доступу к это­
му ре позитор и ю , обратитесь в раздел FAQ на сайте f e d o r a p r o j e c t . o r g /
w i k i / E PE L для получения и нструкци й по доступу к этому репозиторию. Его
легко настроить, но точн ы е команды зависят от версии.
Есл и вы впер вые приступаете к разработке с ценариев ил и к п рограмм ирова н и ю
на языке Python , имеет см ысл перейти непосредствен но к Python 3 . И ме н но е го с и н ­
такс ис м ы де монстрируем в этой главе , хотя на самом деле разн и ца между Pyt hon 2
и Python 3 в наш их простых примерах заключается тол ько в строках p r i n t .
Для существующего программ ного обеспечения вы можете использовать л юбую вер­
сию Python , которую предпочитает Программное обеспечение. Если ваш выбор сложнее,
чем просто новый или стары й код, обратитесь к вики-системе Python на w i k i . pyt hon .
o r g / mo i n / Python 2 o r Python 3 , в которой содержится отличная коллекция задач , реше­
ний и рекоме ндаций .
'�Для получен и я актуальной статистики с м . сайт caniusepythonЗ . com.
Глава 7. Сценарии и командная оболочка
249
Краткое введение в язык Python
Для более пол ного ознакомления с языком Python м ы рекомендуем 5-е издание двух­
том н и ка Изучаем Python М ар ка Лутца ( M ark Lutz). Полную ссылку можно найти в раз­
деле "Л итература" .
П р иведем коротки й сценарий " Hello, world ! " , которы й н ужно сохран ить в файле
helloworld.
# ! /us r / local /bin/pythonЗ
p r i n t ( " H e l l o , wo r l d ! " )
Чтобы запустить е го , установите бит выпол н е н и я или вызовите интерпретатор
pythonЗ напрямую.
$ chmod +х helloworld
$ . /helloworld
Hello world !
Самы й крупн ы й разрыв Python с традицио н н ы м стил е м программирования заклю­
чается в том , что отступы имеют логический см ысл . Для разграничения блоков в язы­
ке Python н е используются фигурные и квадратные скобки или ключевые слова be g i n
и end. Блоки автоматически форм ируются и з выраже н и й , находящихся н а одном уровне
отступов. Точн ы й стиль отступов (пробелы или табуляция , а также глубина отступов)
значения н е имеет.
Создан ие блоков н а языке Python луч ш е всего показано н а при мере . Рассмотр и м
простое выражен ие i f - t h e n - e l s e :
imp o r t s y s
а = s y s . a r gv [ l ]
i f а == " 1 " :
print ( ' а равно 1 ' )
p r i n t ( ' Э т о в с е еще р аздел t h e n инструкции i f . ' )
else :
print ( ' а это ' , а )
p r i n t ( ' Э т о в с е еще р а здел e l s e инс трукции i f . ' )
p r i n t ( ' Э т о - вывод nосле инструкции i f . ' )
Первая строка импортирует модуль s y s , которы й содержит м асс ив a rgv. Две ветки
инструкци и i f состоят из двух строк, каждая с отступом до одного уровн я . (Двоеточие
в кон це строки обычно обозначает начало блока и связано с отступом , которы й следует
за н и м . ) Окончательный оператор печати находится вне контекста оператора i f .
$ pythonЗ Ыockexample 1
а равно 1
Э т о в с е е ще р а з дел t h e n инс трукции i f .
Э т о - вывод после инструкции i f .
$ pythonЗ Ыockexample 2
а ЭТО 2
Э т о в с е е ще раздел e l s e и н струкции i f .
Э т о - в ыв о д после инс трукции i f .
Соглашение об отступах в языке Python я вляется менее гибким средством формати­
рования кода, но оно уме ньшает беспорядок, связанн ы й с использован ием скобок и то­
чек с запятой. Это требует перестройки от тех, кто привык к традиционн ы м разделите­
лям , но большинство людей в конечном итоге приходят к выводу, что им это н равится .
Часть 1. Основы администрирования
250
Функция p r i n t в языке Pyt hon при н и мает произвол ьное кол и чество аргум е нтов.
Она вставляет пробел между каждой парой аргументов и автоматически передает новую
строку. В ы м ожете подавлять ил и изменять эти с и м вол ы , добавляя опции e n d
или
sep = в конец списка аргументов.
Н апример, с тро ка
=
print
( " один " ,
"два " ,
" три " ,
s ep
" - 11
,
end
"!
\n" )
п роизводит вы вод
один - д в а - три !
Комментарии нач и наются с сим вола # и простираются до кон ца строки , как и в я зы ­
ках sh, Perl и Ruby.
Можно разделить дл и н н ые строки, поставив обратные косые черты в местах разрыва
строк. Когда вы это делаете , зн а че ние имеют тол ько отступы первой строки . Вы може­
те отступать в строках продолжен ия настолько далеко, наскол ько вам нравится. Строки
с н е сб ала нс иро ван н ы м и кругл ы м и , квадратн ы м и ил и фигурными скобками автоматиче­
ски си гн али з ируют о продолже н и и даже в отсутствие обратн ых косых черт, но вы може­
те вкл юч и ть обратную косую черту, есл и это упрощает структуру кода.
Н е которые операци и вырезания и вставки преобразуют символ ы табуляции в пробе­
л ы , и , есл и вы не знаете , чего хотите , это может привести вас в беше нство. Золотое пра­
вило гласит: " Ни когда не смешивайте табуляцию и пробел ы ; испол ьзуйте для отступов
ил и то, ил и другое " . М ногие п р ограм мн ые средства делают традиционное предположе ­
н и е о том , что табул я ц и и эквивал е нтны восьми пробелам , что я вляется сли ш ком бол ь­
ш и м отступом для ч итаем ого кода. Больш и нство специал истов из сообщества Python,
похоже , предпочитают пробелы и четырехси м вольные отступы.
Впроче м , бол ь ш и нст�ю те ксто вых редакторов и м е ют варианты , котор ые могут по­
мочь сохран ить ваш е душевное равновесие, либо путе м запрета табуляции в пользу про­
белов, либо путем разного отоб ражения пробелов и табуляции. В крайнем случае вы мо­
жете перевести табуляцию в п робел ы с помощью команды expand.
Объ екты , с т роки , ч и сла , списки, слова ри, кортежи и файл ы
Все типы данн ы х в языке Pyth o n я вляются объектам и , и это дает им бол ьшую мощ­
ность и гибкость, чем о больш инс тве других языков.
В языке Python с п и с ки закл юч е н ы в квадратные с кобки и и ндексируются с н уля.
Они по существу похожи на масс и в ы , но могут содержать объекты л юбого типа.20
В языке Python есть кортежи , которые, по сути, явля ются неизм е н н ы м и с п искам и .
Кортежи эффе ктивнее, ч е м с п ис к и , и полезн ы для представления постоян н ых дан ных.
С интакс ис кортежей такой же , как и для с п исков, за исключением того , что в качестве
раздел ителей испол ьзуются кругл ые , а не квадратные с кобки . П ос кол ьку вы ражен и е
( t h i ng ) в ыглядит как п ростое ал гебраическое выражение, кортежи , содержащие тол ь­
ко оди н элемент, должны содержать запятую, и грающую роль маркера, чтобы устран ить
неоднозначность: ( t h i ng , ) .
П р и ведем нескол ько основ н ы х переменных и типов дан н ых в языке Python:
n ame = ' Г в е н '
rat ing
10
charac t e r s
[ ' Губка Б об ' ,
=
=
' Па трик ' ,
' С квидвард ' ]
20 0днородн ый и более эффективн ый тип масси ва реализован в модуле array, но для бол ьшинства
целей м ы рекомендуем использовать списки .
Глава 7. Сценарии и командная оболочка
251
e l eme n t s = ( ' литий ' , ' углерод ' , ' б ор ' )
p r i n t ( " Имя : \ t % s \ n Р ейтин г : \ t % d " % ( n ame ,
p r i n t ( " П е р с онажи : \ t % s " % c h a r a ct e r s )
p r i n t ( " Кумир : \ t % s " % c h a r a c t e r s [ O ] )
p r i n t ( " Элеме н ты : \ t % s " % ( e l eme n t s , ) )
rating ) )
В этом примере получается следующий результат:
$ pythonЗ obj ects
Г в ен
Имя :
10
Рейтинг :
Персонажи :
[ ' Губка Б об ' , ' Па тр и к ' , ' Сквидвард ' ]
Кумир :
Губ ка Б о б
( ' ли тий ' , ' углерод ' , ' б ор ' )
Эле м енты :
Обратите внимание на то, что стандартное преобразование строки для типов списка и
кортежей представляет их в том виде , в котором они были введены в исходном коде .
Переменные в языке Python не я вляются синтаксически помеченными или не име­
ют объявления типа, но объекты , к которым они относятся , имеют базовый тип. В боль­
шинстве случаев Python не конвертирует типы автоматически , но отдельные функции или
операторы могут это сделать. Н апример, вы не можете объединить строку и ч исло (с по­
мощью оператора +) без явного преобразования ч исла в его строковое представление. Тем
не менее операторы и инструкции форматирования приводят все к строковой форме.
Как показано выш е , каждый объект и м еет строковое представление . Словари , спи­
ски и кортежи рекурсивно форм ируют с вои строковые представлени я , создавая их со­
ставные элементы и комбинируя эти строки с соответствующей пунктуацией.
Оператор форматирования строк % очень похож на функцию s p r i nt f и з языка С,
но его можно использовать везде, где может появляться строка. Это двоичный оператор,
который берет строку слева и значен и я , которые нужно вставить справа. Если необхо­
димо вставить более одного значения, значения должны быть представлены как кортеж.
Словарь в языке Python (также известны й как хеш или ассоциатив н ы й массив) пред­
ставляет собой набор пар кл юч-значение. Хеш можно представить как масси в , чьи и н ­
дексы (кл юч и ) я вляются произвольными значе н ия м и ; они не должны быть цифрам и .
Однако н а практике цифры и строки я вляются общими кл ючами .
Словарные л итералы закл ючены в фигурные с кобки, каждая пара ключей-значений
разделяется двоеточием . При использовании словари работают так же, как списки , за ис­
ключением того, что индексы (ключи) могут быть объектам и , отличны м и от целых чисел .
ordinal
{ 1 : ' пер вый ' , 2 : ' в т ор ой ' , 3 : ' тр е т ий '
p r i n t ( " Упорядоченные слов арные литералы : " , o r d i na l )
р r i n t ( " Пер вый литерал : " , o r d i n a l [ l ] )
=
$ pythonЗ dictionary
Упор ядоче нные словарные литералы :
Первый литерал : п е р в ый
{1:
' первый ' , 2 :
' в т ор ой ' ,
3:
' тр е тий ' )
Python обрабатывает открытые файлы как объекты со ассоциированн ы м и методами .
В соответствии с о с вои м названием метод rea d l i ne ч итает одну строку, поэтому в при­
веденном н иже примере считываются и в ыводятся на печать две строки из файла /etc/
pas swd.
f = ope n ( ' / e t c / pa s swd ' , ' r ' )
p r i n t ( f . r e a d l i n e ( ) , end= " " )
p r i n t ( f . r e a d l i n e ( ) , end= " " )
f . close ( )
Часть 1. Основы администрирования
252
$ pythonЗ fileio
root : x : O : O : root : / root : /bin/bash
d a emon : x : l : l : d a emon : / u s r / s b i n : / u s r / s b i n / n o l o g i n
Переход на новую строку в кон це вызовов фун кции p r i n t подавляется с помощью
параметра end
" " , потому что каждая строка уже содержит символ перехода на но­
вую строку из исходного файла. Python не разделяет их автоматически.
=
Пример п роверки ввода
В следующем сце нарии показана общая схема проверки ввода в языке Python. О н
также демонстрирует определение функций и испол ьзован ие аргументов командной
строки, а также пару других специфических особенностей .
i mp o r t s y s
i mp o r t o s
d e f s h ow_u s a g e ( me s s a g e , c ode
1) :
p r i n t ( me s s a ge )
p r i n t ( " % s : и с ходный к а т а л о г целе вой к а т а ло г " % s y s . a r gv [ O ] )
s y s . e x i t ( c ode )
=
i f len ( sys . a rgv) ! = 3 :
s h ow_ u s a g e ( " Hyжны 2 а ргуме н т а ; в ы в в е ли один % d " %
e l i f n o t o s . pa t h . i s d i r ( s y s . a r gv [ l ] ) :
s h ow_u s a ge ( " Иcx oдный к а т а л о г не найде н " )
e l i f n o t o s . pa t h . i s d i r ( s y s . a r gv [ 2 ] ) :
s h ow_u s a g e ( " Ц e л e в o й к а т а л о г н е найд е н " )
( l en ( s y s . a r gv )
-
1) )
s ou r c e , d e s t
s y s . a r gv [ l : З ]
р r i n t ( " И с ходный к а т а л о г : " , s ou r c e )
р r i n t ( " Целе в ой к а т а л о г " , d e s t )
=
Помимо и м порта модуля s y s , м ы также импортируе м модуль o s для доступа к про­
цедуре o s . p a t h . i s d i r . Обратите внимание на то, что им порт не сокращает ваш доступ
к любым символам , определен н ы м модулями; вы должны использовать полностью ква­
лифицированные имена, которые начинаются с имени модуля .
О пределение п одпрогра м м ы s h ow u s a g e предоставляет значение по умолчан и ю
для кода выхода, если вызывающий объект явно н е указывает этот аргуме нт. Поскольку
все т и п ы дан н ы х я вля ются объе кта м и , аргуме нты фун кции эффективно переда ются
по ссылке.
В первой позиции с писок s y s . a r g v содержит имя сценария , поэтому е го дл и н а
больше, ч е м коли чество аргуме нтов командной строки , которые были фактически пре­
это с писок фрагментов. Л юбопытно, что срезы
доставлены. Форма s y s . a r gv [ 1 : З ]
н е вкл ючают эле м е нт в дальнем конце указанного диапазона, поэтом у этот фрагмент
включает только элементы s ys . a rgv [ 1 ] и s y s . a rgv [ 2 ] . Чтобы включить второй и по­
следующие аргументы, можно просто написать s y s . a rgv [ 1 : ] .
Как и в sh, в языке P_ython есть специальное условие "else if' ; ключевым словом я в­
ляется e l i f . Но в нем нет явной инструкции c a s e или s w i t c h .
Параллел ьное присваивание переменных s ou r c e и de s t нем ного отличается о т н е ­
которых языков тем , что сам и переменные н е входят в список. Python допускает парал­
лельные назначения в любой форме.
В я з ы ке Python испол ьзуются оди наковые оператор ы сравн е н и я для ч исловых
и строковых знач е н и й . Оператор сравне н ия " н е раве н " и м еет вид !
но в языке нет
_
-
=
,
Глава 7. Сценарии и командная оболочка
253
унарного оператора ! ; для этой цел и используется ключевое слово n o t . Существуют
также булевы операторы a n d и o r .
Циклы
В приведен н о м н иже фрагменте используется конструкция f o r . . . i n для обхода
элементов в диапазоне от 1 до 1 О.
f o r coun t e r i n r an g e ( 1 , 1 0 ) :
p r i n t ( c o un t e r , e nd= " " )
print ( )
# После дний пе р е х о д н а н о в ую строку
Как и в срезе м асс и ва в предыдущем примере , правая конеч ная точка диапазона
фактически в него н е входит. В ывод включает только ч исла от 1 до 9:
1 2 3 4 5 6 7 в 9
Это единственн ы й тип цикла в языке Python, но это очень мощ н ы й и нструмент.
В языке Python есть несколько фун к ц и й , которые отл и ч ают е го конструкцию f o r
от других языков.
•
•
•
В ч исловых диапазонах нет ничего особен н ого. Л юбой объект может поддержи­
вать итерационную модель Python как обычно. Можно перебирать строку (по сим­
волам ) , список, файл ( по символам , строкам или блокам) , список и т. д.
Итераторы могут принимать несколько значений, и можно иметь несколько пере­
м е н н ых цикла. Присваивание в верхней части каждой итерации действует так же ,
как обычные множествен н ы е присваивания в языке Python. Эта функция особен ­
н о хорош а дЛ Я обхода словарей.
В циклах f o r и wh i l e в конце могут быть разделы e l s e , которые выполняются
только в том случае , если цикл завершается нормал ьно, в отличие от выхода из цик­
ла по инструкции b r e a k . Поначалу это кажется неестестве н н ы м , но такой подход
позволяет довольно элегантно обрабатывать некоторые варианты испол ьзования.
В приведенном ниже примере сценарий принимает регулярное выражен ие в команд­
ной строке и сопоставляет его с списком гномов из сказки о Белоснежке, а также с цве­
тами их костюмов. На экран выводится первое совпадение с частя м и , которые соответ­
ствуют регулярному выражению, окружен ному сим волами подчеркивания.
imp o r t s y s
imp o r t r e
sui t s = {
' Ba s h fu l ' : ' y e l l ow ' , ' Sn e e z y ' : ' b rown ' , ' Doc ' : ' o r ange ' ,
' Dop e y ' : ' g r e en ' , ' Нарру ' : ' Ы uе ' , ' S l e ep y ' : ' t aupe '
' Grump y ' : ' r e d ' ,
p a t t e r n = r e . c omp i l e ( " ( % s ) " % s y s . a r gv [ l ] )
for dwa r f , c o l o r i n s u i t s . i t ems ( ) :
i f p a t t e r n . s e a r ch ( dw a r f ) or p a t t e rn . s e a rc h ( c o l o r ) :
p r i n t ( " % s ' s dwa r f s u i t i s % s . " %
( p a t t e rn . s ub ( r "_ \ l _ " , dwa r f ) , p a t t e rn . sub ( r " \ 1_ " , c o l o r ) ) )
break
else :
p r i n t ( " No dwa rve s o r dwa r f s u i t s ma t ch e d t h e p a t t e rn . " )
Н иже приведен вариант вывода:
Часть 1. Основы администрирования
254
$ pythonЗ dwarfsearch ' [ aeiou] { 2 ) '
S l_ee_p y ' s dwa r f s u i t i s t_au_p e .
$ pythonЗ dwarfsearch ' qa l gu '
No dwarve s o r dwa r f s u i t s ma t c h e d t h e p a t t e rn .
Присваивание переменной s u i t s демонстрирует синтаксис Python Д/JЯ ш ифрова­
н ия символьных словарей. М етод s u i t s . i t erns ( } я вляется итератором ДIJЯ пар ключ­
значен и е - обратите вн имание на то, что на каждой итерации м ы извлекае м как имя
гнома, так и цвет его костюма. Есл и вы хотите перебирать тол ько кл ючи, вы можете
просто написать dwa r f in s u i t s .
Язык Pytho n реализует обработку регулярных выражений с помощью модуля r e . В язы­
ке нет встроенных функций для работы с регулярными выражениями, поэтому обработка
регулярных выражения в языке Pyth o n немного более ограниченная , чем, скажем, в языке
Perl. Здесь шаблон регулярного выражения изначально компил ируется из первого аргумента
командной строки, окруженного скобками (для форм ирования группы захвата). Затем стро­
ки тестируются и модифицируются поисковыми и вспомогательными методам и объекта
r e g e x . Вы также можете вызвать re . s e a r c h и другие функции непосредственно, предо­
стаRЛЯя регулярное выражение для использования в качестве первого аргумента.
Символы \ 1 в строке подстановки представляют собой обратную ссылку на содер­
жимое первой группы захвата. Странно выглядящий префикс r , который предшествует
строке подстановки ( r " _ \ 1 _ " ) , подавл яет нормальную подстановку управляющих сим­
волов в строковых константах ( r обозначает " raw " ) . Без этого шаблон заме н ы состоял
бы из двух символов подчеркивания, окружающих символ с цифровым кодом 1 .
Следует отметить, что в словарях н ет определенного порядка обхода. Если в ы запу­
стите поиск гномов во второй раз, то можете получить другой ответ:
$ pythonЗ dwarfsearch ' [ aeiou ] { 2 ) '
Dope y ' s dwa r f s u i t i s g r _ e e_n .
7 6 П РОГРАММИРОВАНИЕ НА ЯЗЫКЕ Ruвv
.
.
Язык Ruby, разработан н ы й и поддерживаем ы й японским разработчиком Юкихиро
М ацумото (Yukihiro " Matz" Matsumoto) , обладает м ногим и функциям и , общими с язы­
ком Pyt ho n , включая ш ироко рас простра не н н ы й подход " Все я вл яется объекто м " .
Первоначально в ыпуще н н ы й в середине 1 990-х годов , язык Ruby не получил известно­
сти , пока десятилетия спустя н е появилась платформа веб-разработки Rails.
В умах л юдей язык Ruby по-прежнему тесно связан с сетью, но в самом языке нет
ничего веб-специфичного. О н хорошо подходит для написания сценариев общего на­
значения. Однако язык Pytho n , вероятно, все же луч ш и й выбор для основного языка
сценариев, хотя бы из-за его более широкой популяр ности.
Хотя язык Ruby во многом эквивале нтен язы ку Pytho n , он я вл яется более гибким .
Например, классы Ruby остаются открытым и для модификации другим п рогра м м н ы м
обес пече н ие м , и сообщество программ истов на языке Ruby не возражает против расши­
рен и й , которые изменяют стандартную библиотеку.
Язык Ruby нравится те м , у кого есть с клон ность к " с интакс ическому сахару " ,
т.е. особенностя м , которые н а самом деле н е меняют базовый язык, н о позволяют более
четко и четко в ыражать код.
В среде Rails, например, строка
due d a t e
7 . da y s . f rom_now
Глава 7 . Сценарии и командная оболочка
255
создает объект класса т ime без ссылки на и м е н а л юб ы х связан н ых с вре м е н е м классов
или выпол н е н и я явных арифметических операций над датой и вре м е не м . Платформ а
Rails определяет объе кт days как расш ире н ие класса F i x num, предста вл я ю ще го цел ые
числа. Этот м етод возвращает объект D u r a t i o n , котор ы й действует как ч и сл о ; исполь­
зуется в качестве значени я , эквивалентного 604800, т. е . количеству с е кунд в се м и днях.
Если проверить его в отладчике , он опишет себя как " 7 дней " . 21
Язык Ruby упрощает разработку "доме н н ых язы к ов " ( н а п р и м е р , D S L) , м и н и - язы­
ков, которые на самом деле я вляются подмножеством яз ы ка Ruby, но которы е рассма­
триваются как специализированные систе м ы конфи гура ции. Н а п р им ер , язык Ruby D S L
используется в средствах настройки Chef и Puppet .
W Дополнител ьную информацию об инструментах Chef и Puppet см . в главе 23.
Инсталля ция
В н е которых системах язык Ruby установлен по умол ча н и ю , а в н е которы х - не т.
Тем не менее он всегда доступен как пакет, часто в н е с кол ь ких версиях.
На сегодн я ш н и й ден ь (версия 2 . 3 ) язык Ruby подде ржи вает относительно хорошую
совместимость со стар ы м кодом. В отсутствие конкре т н ых предупрежден и й обычно луч­
ше всего установить самую последнюю версию.
К сожал е н и ю , бол ь ш инство систе м н ых пакетов отстают н а н е с колько вы пусков
от рел изов языка Ruby. Есл и ваша библ иотека паке тов не вкл ючает текущую версию
(проверьте сайт ruby- l a ng . o r g , чтобы определить, так л и это) , установите самую све­
жую верси ю через RVМ ; не п ытайтесь делать это сами .
W Подробнее о б RVM см . в разделе 7 . 7 .
К раткое введение в язык Ruby
Поскол ьку я з ы к и Ruby и Pyt hon настолько похожи , н е которы е фрагменты кода
на языке Ruby могут показаться п охож и м и на фр а г м е н ты кода из раздела о я з ы к е
Python , приведе н н ые ранее в этой главе .
# ! / u s r /b i n / env ruby
print " H e l l o , w o r l d ! \ n \ n "
name
' Gwen '
rating
10
cha r a c t e r s
[ ' SpongeBob ' , ' Pa t r i c k ' , ' S qui dwa r d ' ]
e l eme n t s
{ З = > ' l i t h i um ' , 7
> ' c a rbon ' , 5 => ' b o r on '
=
=
=
=
p r i n t " N ame : \ t " , n ame , " \nRa t i n g : \ t " ,
p r i n t " Ch a r a c t e r s : \ t # { ch a r a c t e r s } \n "
p r i n t " E l emen t s : \ t # { e l eme n t s } \ n \ n "
rating,
" \n "
e l eme nt_name s
e l eme n t s . va l u e s . s o r t ! . map ( & : upca s e ) . j o i n ( ' ,
p r i n t " E l eme n t n ame s : \ t " , e l emen t_name s , " \ n \ n "
=
')
e l eme n t s . e a c h do J ke y , v a l u e l
p r i n t " At omi c numЬ e r # { ke y } i s # { va l ue } . \ n "
end
21 Эта форма п ол иморфизма я вл яется обще й для я з ыков Ruby и Python. Его час т о называют
"утиной типизацией " : если объект ходит как утка и крякает ка к утка , вам не нужно беспокоиться
о том , действительно ли это утка.
Часть 1 . основы администрирования
256
Вывод выглядит следующим образо м :
Hello, world !
Name :
Gwen
10
Ra t i n g :
Ch a r a ct e r s :
[ " SpongeBob " , " Pa t r i c k " , " S qu i dwa r d " ]
E l emen t s :
{ З = > " l i t h i um " , 7 = > " c a rb on " , S = > " b o r on " )
E l eme n t name s : B ORON , CARBON , L I T H I UM
At omi c numЬ e r З i s l i t h i um .
A t omi c numЬ e r 7 i s c a rbon .
At omi c n umЬ e r 5 i s b o ron .
Как и Python, язык Ruby испол ьзует скобки для разграничения массивов и фигурные
скобки для разделения словарных л итералов. (В языке Ruby они называются "хешам и " . )
О п ератор = > отделяет каждый хе ш - кл юч о т е го соответствующе го значе н и я , а пары
ключ-значение отделя ются друг от друга запятым и . В языке Ruby нет кортежей.
Функция p r i n t в языке Ruby
это фун кция (ил и , точ нее , глобальны й м етод) , как
и в языке Python 3. Однако, есл и вы хотите испол ьзовать переход на новую строку, вы
должны явно указать это.22 Кром е тоrо, круглые скобки, обычно встречающиеся вокруг
аргуме нтов в вызовах функций, в Ruby я вляются н еобязательн ы м и . Разработчики обыч­
но н е в ключают их, есл и они не помогают прояснить код или устранить неоднознач ­
ность. (Обратите внимание на то, что н екоторые из вызовов функции печати включают
в себя несколько аргументов, раздел е н н ых запятым и . )
В нескольких случаях м ы использовали фигурные скобки # { } скобки дл я интерполя­
ции значений переменных, заключен н ые в строках с двумя кавычками. Такие скобки мо­
гут содержать произвол ьный код Ruby; любое значение. созданное кодом , автоматически
преобразуется в тип строки и вставляется во внешнюю строку. Вы также можете конка­
тенировать строки с помощью оператора +. но интерполяция обычно более эффективна.
Строка, вычисляющая e l ement_name s , иллюстрирует еще нескол ько возможностей
языка Ruby:
-
e l ement_name s = e l eme nt s . va l u e s . s o r t !
. map ( & : upc a s e )
. j oin ( ' ,
'
)
Это серия вызовов методов , каждый из которых работает с резул ьтатом , возвра­
щае м ы м предыдущим методо м , подобно конвейеру. Например, метод v a l u e s объек­
та e l emen t s создает массив строк, которые зате м сортируются в алфавитном порядке
функцией s o r t ! . 23 М етод m a p класса A r r a y вызывает метод u p c a s e для каждого эле­
м е нта, а затем с нова собирает все резул ьтаты в новый массив. Наконец, метод j o i n
объединяет элементы этоrо масси ва, ч ередующиеся с запятым и , для создания строки.
Блоки
В предыдущем коде текст между do и end представляет собой блок, известный в дру­
гих языках как лямбда-функция , зам ы кание или анон имная функция . 24
22 Есть также функция puts , которая добавляет символы перехода на новую строку автоматически,
но она, возможно, сли ш ком изощрен ная . Если вы попытаетесь самостоятельно добавить с и мвол
перехода на новую строку, функция puts не будет вставлять эти символ ы автоматически.
2.� восклицательный знак в и ме н и функции sort ! предупреждает вас, что при использова н и и этого
метода н ужно быть осторож н ы м . Это не с интаксическое п равило, а п росто часть и м е н и метода.
В данном случае функция sort ! сорти рует масс и в на месте . Существует также метод s o r t без
восклицательного знака, который возврашает элементы в новом отсортированном массиве.
24Фактически в языке Ruby существуют три объекта этого общего типа, известн ые как блоки,
процедуры и ля мбда. Различия меЖдУ ними незнач ительны и не важны для этого обзора.
Глава 7 . Сценарии и командная оболочка
257
e l eme n t s . e a c h do l ke y , v a l u e l
p r i n t " A t om i c numЬ e r # { ke y } i s # { va l ue } . \ n "
end
Данн ы й блок принимает два аргуме нта, которые он называет k e y и v a l u e , и выво­
дит их значен ия на экран .
Оператор e a c h выглядит как функция языка, но это всего л и ш ь метод, определя­
емый хешам и . Оператор e a c h принимает блок как аргуме нт и вызывает его один раз
для каждой пары ключ-значе н и е , содержаще й хеш . Этот тип итерационной функци и ,
используемой в сочетании с блоко м , очен ь характерен для кода на язы ке Ruby. И м я
e a c h является стандартны м именем обобщен н ых итераторов, но многие классы опреде­
ляют более кон кретные версии, такие как e a c h_ l i ne или e a c h_ c h a r a c t e r .
В языке Ruby есть ал ьтернативн ы й синтаксис для блоков, в котором в качестве раз­
делителей используются фигурные с кобки, а не do . . . end. Он означает точно то же са­
мое , но больше похож на часть выражения. Например,
cha r a c t e r s . map { 1
с
1
c . r e ve r s e } #
[ " b oBe gnop S " ,
" kc i r t a P " ,
" d r awdiuqS " ]
Эта форма функционально идентична c h a r a c t e r . map ( & : reve r s e ) , но вместо того,
чтобы просто указывать методу ma p , какой метод вызывать, м ы включил и явный блок,
вызывающий обратны й метод.
Значение блока - это знач е н и е последне го выраже н и я , которое оно выч исляет
до завершения. Удобно, что почти все в языке Ruby является в ыражением (т. е . " фраг­
ментом кода, который может быть выполнен для создания знач е н ия " ) , вкл юч ая струк­
туры управления, такие как c a s e (аналог конструкции s w i t c h в большинстве языков)
и i f - e l s e . Значения этих выражений отражают значение, получ е н н ое в зависимости
от того, какой из разделов c a s e или ветви инструкции i f- e l s e был выполнен.
Блоки имеют м ного применений, помимо итераци й . Они позволяют одной функции
выполнять процедуры н астройки и удаления от и м е н и другого раздела кода, поэтому
они часто представляют собой м ногоэтапные операции , такие как транзакции баз дан ­
ных или операции с файловой системой.
Например, следующий код открывает файл / e t c / p a s s wd и выводит строку, опреде­
ляющую учетную запись root:
o p e n ' / e t c / p a s s wd ' , ' r ' do 1 f i l e 1
f i l e . e a c h_l i ne do l l i n e l
p r i n t l i ne i f l i ne . s t a r t w i t h ?
end
end
' ro o t : '
Фун кция o p e n открывает файл и передает его объект IO во вне ш н и й блок. После
того как блок завершит работу, файл откроется автом атически. Нет необходимости
в отдельной операции закрытия (хотя она существует, если вы хотите ее использовать) ,
и файл закрывается независимо от того , как завершается внеш н ий блок.
Применяемая здесь постфиксная конструкция i f может быть знакома тем , кто ис­
пользовал язык Perl. Это хороши й способ выразить простые условн ы е обозначения без
сокрытия основного действия. Здесь сразу видно, что внутренний бло к представляет со­
бой цикл , который выводит некоторые строки.
В случае , если структура аргумента l i ne фун кции p r i n t не ясна, в нее снова вклю­
чаются необязательные круглые скобки. Оператор i f имеет сам ы й н изкий приоритет
и использует один метод вызова для обоих вариантов:
print
( l i ne )
i f l i n e . s t a r t wi t h ?
( ' root : ' )
Часть 1. Основы администрирования
2 58
Как и в случае метода s o r t ! знак вопроса представляет собой соглашение об именах
методов, возвращающих логические значен и я .
С и нтаксис для определения именован ной фун кuии нес кол ько отл ичается о т си нтак­
сиса для блока.
,
de f show_u s a ge ( ms g
ni l )
S T DERR . pu t s m s g i f ms g
S T DERR . pu t s " U s a ge : # { $ 0 )
exit 1
end
=
f i l e n ame
Скобки все еще я вля ются н еобязател ьн ы м и , но на практике о н и все гда отобража­
ются в этом контексте , если фун кuия не п р и н и мает аргуме нтов. Здесь аргум ент m s g
п о умолчанию раве н н улю.
Глобальная перемен ная $0 явл яется довольно загадоч ной и содержит и м я , по кото­
рому вызывается текущая программа. (Традиuион но эти м именем является первый аргу­
мент масс и ва a rgv. Однако по соглашению в языке Ruby ARGV содержит только факти­
ческие аргументы командной строки . )
Как и в язы ке С , вы можете обрабаты вать н ебулевые знач е н и я , как если бы о н и
были булевы м и , что показано здесь в форме i f ms g . Однако отображение в языке Ruby
для этого преобразования н е м н ого необычное : все , кроме n i l и f a l s e , сч итается ис­
т и н н ы м . В частности , О
это истин ное значение. ( На практике эта возможность часто
оказы вается удобной . )
-
Символ ы и хеш и опций
В я зы ке Ruby ш ироко испол ьзуется необыч н ы й ти п дан н ых, называе м ы й символом
и обозначен н ы й двоеточи е м , например : : examp l e . О с и м волах можно думать как о не­
преложных строках. О н и обычно испол ьзуются как ярл ы к и или известн ые хеш - кл юч и .
Внутре н н е язы к Ruby реал изует и х как ч исла, поэтому они быстро хеш ируются и срав­
н и ваются.
С и м вол ы та к ч асто испол ьзуются в качестве хеш - кл юч е й , что в верс и и Ruby 2 . 0
определ ил и ал ьтернатив н ы й синтаксис для хеш -л итералов, чтобы уме н ьш ить кол иче­
ство знаков пре пинан и я . Стандартны й хеш
h
=
{
: an i ma l =>
' ca t ' ,
: ve g e t a Ы e =>
' carrot ' ,
: mi n e r a l = > ' z e o l i t e '
}
можно написать в стиле Ruby 2 . 0 следующи м образом :
h
=
{ a n ima l :
' c a t ' , vege t aЫ e :
' c a r r o t ' , mi n e r a l :
' zeolite '
}
Вне этого хеш-л итерального конте кста с и м вол ы сохраняют свои префиксы : везде ,
где они появляются в коде. Например, вот как получить кон кретные знач е н ия из хеша:
h e a l t h y_s n a c k
=
h [ : ve g e t aЫ e ]
#
' c a r r ot '
В я з ы ке Ruby п р и н ято своеобразное , но мощное соглаше н и е для обработки пара­
метров в вызовах функuи й . Есл и вызывае мая фун кuия запра ш и вает такое поведе н и е ,
язык Ruby сdби рает завершающие аргументы вызова, которые напом и н ают хеш иро­
ван н ы е пары , в новый хеш . Затем он передает этот хеш функuии в качестве аргумента.
Например, в выраже н и и , допустимом на платформе Rails,
f i l e f i e l d_t a g : up l o a d ,
_
accept :
' appl i c a t i on / pd f ' ,
id :
' c omme n t p d f '
функuия f i l e _ f i e l d_ t a g получает только два аргумента - сим вол : u p l o a d и хе ш , со­
держащий кл юч и : a c c e p t и : i d . Пос кольку хеш и не и м е ют жесткого порядка, не важ­
но, в каком порядке появляются параметры.
Глава 7 . Сценарии и командная оболочка
259
Этот т и п гибкой обработки аргументов проя вляется в стандарте языка Ruby и дру­
гим и способа м и . Библиотеки Ruby, в ключая стандартную библиотеку, как правило, де ­
лают все возможное , чтобы принять максимал ьно ш ирокий диапазон входных данн ых.
Скаляры , массивы и хеши часто ямяются равноправны м и аргуме нтами , и м ногие функ­
ции можно вызывать с помощью блоков или без них.
Регулярные выра жения в языке Ruby
В отличие от Python, язык Ruby и меет немного "синтаксического сахара" мя работы
с регулярными выражениями. Язык Ruby поддерживает традиционную / . . . / нотацию
для литералов регулярных в ыраже н и й , а содержимое может содержать упрамя ющие по­
следовательности символов # { ) , похожие на строки с двумя кавы ч ками.
Кром е того, в языке Ruby определен оператор
(и его отрицание ! - ) дЛЯ провер­
ки соответствия м ежду строкой и регулярны м выражением . О н возвращает либо и ндекс
первого совпадения, либо n i l , если нет совпадения.
=-
" He rmann He s s e " = - / H [ ae i o u ] / # = > О
Для того чтобы получить доступ к ком понентам соответствия , явно вызовите метод
ma t c h регулярного выражения. Он возвращает л ибо n i l (если соответствий нет) , либо
объект, к которому можно получить доступ в виде массива компонентов.
if m = / ( л H \ w * ) \ s / . ma t c h ( " He in r i c h H o f fme y e r h e a d e d t h i s he i s t " )
put s m [ O ] # ' H e i n r i ch '
end
Рассм отрим предыдущую программу для определения цвета костюма гнома на языке
Ruby.
s ui t s = {
B a s h f u l : ' ye l l ow ' , S ne e z y : ' b r own ' , D o c : ' o r a n g e ' , G rump y :
Dope y : ' g r e en ' , Нарру : ' Ыu е ' , S l e e p y : ' t aupe '
' re d ' ,
abo rt " U s a g e : # { $ 0 ) p a t t e r n " u n l e s s ARGV . s i z e == 1
pat = / ( # { ARGV [ O ] ) ) /
ma t che s = s u i t s . l a z y . s e l e c t { l dwa r f ,
color l pat
dwa r f 1 1 p a t
i f ma t c he s . a n y ?
dwa r f , c o l o r = ma t c he s . f i r s t
p r i n t " % s \ ' s dwa r f s u i t i s % s . \ n " %
[ dwa r f . t o_s . s ub ( p a t , ' \ 1 ' ) , c o l o r . s ub ( p a t , ' \ 1
else
p r i nt " N o dwa rve s o r dwa r f s u i t s ma t c h e d t h e p a t t e r n . \ n "
end
co l o r )
')
Метод s e l e c t , применен н ы й к колл е кции , создает новую коллекцию, включаю­
щую только те элементы, для которых предоставленн ы й блок имеет значение как t ru e .
В этом случае совпадения представл я ют собой нов ы й хеш , содержащий только пар ы ,
м я которых л и бо кл ю ч , л и бо знач е н ие соответствует шаблону поиска. Пос кольку
м ы применили ленивый вызов ( l a z y) , фильтрация на самом деле не произойдет, пока м ы
не попытаемся извлечь значения и з результата. Фактически этот код проверяет столько
пар, сколько необходимо мя поиска соответствия .
Вы зам етил и , что оператор
сопостамения с образцом использовался на символах,
которые представляют имена гномов? Он работает, потому что оператор
достаточно
умен, чтобы перед сопостамением преобразовать символы в строки. К сожалению, при
=-
=-
часть 1. Основы администрирования
260
испол ьзовании шаблона подстановки мы должны явно выпол н ить это преобразование
(с помощью метода t o _ s ) ; метод s u b определ е н только для строк, поэтому нам нужна
настоя щая строка для его вызова.
Обратите в н и м а н и е также на параллельное присваи ван и е гнома и цвета. М етод
ma t c h e s . f i r s t возвращает двухэлементный массив, который Ruby рас паковывает ав­
томатически.
Оператор % дл я строк работает аналоги ч но такому же оператору в языке Python; это
версия фун кции s p r i n t f в языке Ruby. Здесь есть два ком понента для запол не ни я, по­
этому мы передаем значен ия как двухэлементн ый масс ив.
Я зык Ruby ка к фильтр
Язык Ruby можно испол ьзовать без сценария , помещая изол ирован ные выражен ия
в командную строку. Это простой способ сделать быстрые преобразования текста ( прав­
да, язык Pe rl по-прежнему нам ного лучше справляется с этой задачей).
И спользуйте параметры командной строки -р и - е для цикл ического обхода пото­
ка STD IN, выпол н ите простое выраже ние для каждой строки ( представлен ное как пере ­
мен ная $ _ ) и распечатайте резул ьтат. Например, следующая команда пере водит строку
/etc /pas swd в верхн и й регистр:
$ ruЬy -ре ' $ . tr ! ( " a - z " , "A- Z " ) ' /etc/pas swd
NOBODY : * : - 2 : -2 : UN P R I V I LEGED U S E R : /VAR / EMPT Y : / U S R / B I N / FA L S E
ROOT : * : O : O : S Y S T EM ADM I N I S T RATOR : /VAR / ROOT : / B I N / S H
Команда ruЬy - а включает режим автоматического разделения, отделяющий входные
строки от полей, которые хранятся в массиве с именем $ F. По умолчан ию разделителем яв­
ляется пробел , но вы можете установить другой шаблон разделителя с помощью опции -F.
Режим разделения удобен для испол ьзования в сочетании с параметром -р или е го
вариантом -n, которы й не подразумевает авто матического вывода на экран . В приве­
ден ной ниже команде конструкция ruЬy -ane ис пользуется для создания версии файла
pas swd, которая включает тол ько имена пользователе й и оболочки.
$ ruЬy -F : - ane ' print $F [ O ] , " : " , $F [ - l ] ' /etc/passwd
nobody : / u s r / b i n / f a l s e
r o o t : /Ь i n / s h
Тол ько бесстраш н ы й п рогра м м ист может испол ьзовать параметр - i в сочета н и и
с парам етром -ре для редакти рован ия файлов на месте . Язык Ruby ч итает содержимое
файлов, представляет их строки для редактирования и сохран яет резул ьтаты в исход­
ные файл ы . Вы можете задать параметр - i , который сообщает языку Ruby, как создать
резервную коп ию исходной верс и и каждого файла. Например, - i . bak создает копи ю
файла pas swd с и менем pas swd . bak. Остере гайтесь! Есл и в ы не создадите резервный
шаблон , вы вообще не получ ите резервные копи и . Обратите вниман ие на то, что между
параметром -i и суффиксом нет пробела.
7 7 У ПРАВЛЕНИЕ БИБЛИОТЕКОЙ И СРЕДОЙ
для РvтноN и Ruвv
.
.
Я зыки имеют много одинаковых вопросов управле н ия пакетами и версиями и часто
решают их аналоги ч н ы м образом . Поскол ьку языки Python и Ruby в этой области по­
хожи друг на друга, мы обсуждаем их в этом разделе вместе .
Глава 7. Сценарии и командная оболочка
261
Пои ск и уста новка пакетов
Самое ос новное требование - обеспеч ить простой и стандартизированн ы й способ
обнаружения, получения, установки , обновления и распространения дополн ительного
программ ного обеспечения. У языков Ruby и Python есть централизованные хран ил ища
для этой цели, у Ruby - на сайте rubygems . org, в у Python - на сайте pypi . python . org.
В м ире Ruby пакеты н азы ваются "драгоце н н ы м и ка м н я м и " (gems) , а команда
для управлен ия м пакетами также называется gem. Команда gem search regex пока­
зывает доступн ые пакеты с соответствующим и именами , а gem install имя_ па к е та
загружает и и нсталл ирует пакет. С помощью параметра - -user-install можно инстал ­
лировать приватную коп и ю вместо изменения модификации набора пакетов в системе.
Эквивалент в языке Python называется pip (pip2 или рiрЗ , в зависимости от того ,
какие верс ии Pyt h o n установл е н ы ) . Н е все систе м ы включают его по умолчан и ю .
Систе м ы , которые этого не делают, обеспечивают доступ к н е м у как к отдельному паке ­
ту на уровне операцион ной с исте м ы . Как и в случае с пакетами язы ка Ruby, основн ы м и
командами я вляются pip search и pip ins tall . Опция - -user устанавл и вает пакеты
в ваш домашн и й каталог.
Утил иты gem и pip пон имают зависимости между пакетам и , по крайней мере на ба­
зовом уровне. Когда вы устанавливаете пакет, вы неявно запраш и ваете , чтобы все паке ­
ты , от которых он зависит, также были установлены (есл и они еще не и нсталлирова н ы ) .
В базовой среде Ruby или Python может быть установлена только одна версия пакета.
Если вы переустановите или обновите пакет, старая версия будет удалена.
У вас часто есть выбор для установки пакета gem или pip с помощью стандартно­
го языкового механ изма (gem или pip) ил и пакета уровня операцион ной с исте м ы , ко­
торый хранится в стандартном хра н ил и ще вашего поставщика. Пакеты операцион ной
системы с большей вероятностью будут устанавл иваться и запускаться без пробле м , но
они с меньшей вероятностью будут обновляться . Ни оди н из вариантов не и меет явного
преимущества.
Соэдание воспроизводимых сред
Программы, библиотеки и языки развивают сложные сети зависимостей, поскольку они
эволюционируют вместе во времени. Производствен н ый сервер может зависеть от десятков
или сотен таких компонентов, каждый из которых имеет свои собственные ожидания отно­
сительно среды установки. Как определить, какая комбинация версий библиотеки создаст
гармоничную среду? Как убедиться, что конфигурация , которую вы тестировали в лабора­
тории разработки, является той же самой, которая развертывается в облаке'? В обще м , как
сделать так, чтобы управление всеми этими частями не было большой проблемой?
Языки Python и Ruby имеют стандартизирован н ы й способ для выражения зависимо­
сти между пакета м и . В обеих с истемах разработч ики пакетов создают текстовый файл
в корне проекта, который перечисляет е го зависи мости . В языке Ruby файл назы вается
Gemfile, а в языке Python
requirements . txt. Оба формата поддерживают гибкие
спецификаци и версий для зависи мосте й , поэтому пакеты могут зая вить, что они совме­
сти м ы с "л юбой версией пакета s imple j son версии 3 ил и в ы ш е " или Ra il s 3, но не
Rails 4". Также можно указать точ ное требование к версии для л юбой зависимости.
Оба формата файлов позволяют указать источник для каждого пакета, поэтому зави­
симости не обязател ьно дол жн ы распростран яться через стандартный пакет хранилища.
Поддерживаются все рас простране н н ые источ н и ки : от веб-адресов до локал ь н ых фай ­
лов и хранил и щ G it Hub.
-
"
Часть 1. Основы администрирования
262
И н сталл и руйте п а кет за в и с и м осте й Pyt h o n с парам етром p i p i n s t a l l - r
requi rements . txt. Хотя команда pip отл ич н о с п равляется с определ е н и е м с п е ц­
и ф и ка ц и й отдел ь н ы х верс и й , она, к сожал е н и ю , не м ожет сам остоятел ьно р е ш ать
сложные отношения зависимосте й между пакета м и . Разработч и кам и ногда приходит­
ся настраивать порядок, в котором пакеты упом инаются в файле requi rements . txt
для достижения удовлетворител ьного результата. Кроме того , новые выпуски пакетов
могуг наруш ить равновеси е верс и и , хотя это происходит редко.
Команда p i p f r e e z e рас печат ывает текущи й пакет пакетов Python в формате
requirements . txt , указывая точ ную верси ю для каждого пакета. Эта фун кция может
быть полезна для репл и кации текущей среды на производственном сервере.
В м ире Ruby пря м ы м аналогом команды pip -r я вляется команда gem i n s ta l l
-g Gemfile. Однако в бол ьш и нстве случаев для управления зависимостя м и луч ш е ис­
пользовать менеджер управления пакета м и Bundler. Выпол ните команду gem install
bundler, чтобы установить его (есл и он еще не установлен в системе), а затем запустите
установку пакета из корневого каталога проекта, которы й вы настраи ваете. 25
У менеджера Bundl e r есть н есколько и нтересных особен ностей .
•
О н действительно выполняет рекурси вное управл е н ие зависимостя м и , поэтому,
есл и существуют пакеты , которые вза и м н о совместимы и удовлетворяют всем
огран иче н и я м , менеджер Bu ndler может найти е го самостоятельно.
•
Он автоматически записывает резул ьтаты расчетов версий в файл Gemfi le . lock.
П оддержание этой контекстной и нформации позволяет менеджеру Bundl e r об­
рабаты вать обновл е н ия в файле Gemfile надежно и эффективно. П ри переносе
на новую версию G emfile менеджер Bundler изменяет только пакеты, в которых он
нуждается .
•
Поскол ьку файл Gemfile . lock ассоци ирован с о средой, запуск установки пакета
на сервере развертывания автоматически воспроизводит среду пакета , найденную
в среде разработки. 26
•
В режи ме разверты ван и я (bundle i n s t a l l - -deployment) менеджер Bundler
устанавл ивает отсутствующие пакеты в каталог локального проекта, помогая изо­
л ировать проект от любых будущих изменений. Затем можно использовать команду
bundle ехес для запуска определенных команд в этой гибридной среде пакетов. 2 7
Нескол ько сред
Команда pip и bundle успешно осуществл я ют управление зависимостя м и для от­
дел ьн ых программ Python и Ruby, но что, есл и две программы на одном сервере имеют
противоречивые требования?
В идеале каждая программа в производствен ной среде будет иметь собствен ную би­
блиотечную среду, которая не зависит от систе м ы и всех других программ .
2� n акеты в языке Ruby моrут содержать команды на уровне оболоч к и . Одна ко у н и х обычно
нет с п равоч н ы х стра н и u ; дл я п олуч е н и я п одробн ы х с веде н и й о п акете выпол н ите команду
bundle help или обратитесь к п олной документаuии на сайте bundler . io"
2'' И л и , по край ней мере, это поведение по умолчанию. При необходимости в файле Gelllf i le леrко
указывать разл ичные требова н ия к средам разработки и развертыван ия .
27 Н екоторые п рограммные пакеты, такие к а к Rails, я вляются совместимыми с менеджером Buпdler
и моrут и с п ол ьзовать локал ьно установлен н ые пакеты даже без в ы п ол н е н и я команды ехес
bundle.
Глава 7. сценарии и командная оболочка
263
Пакет virtualenv: виртуальные среды для языка Python
Пакет v i r tualenv языка Python создает в иртуал ьные сред ы , которые находятся
в своих собствен н ых каталогах. 2 8 Чтобы настроить новую среду, после установки пакета
просто запустите команду virtualenv с именем пути .
$ virtualenv myproject
New python e x e c u t a Ы e i n / home / u l s ah /myp r o j e c t / b i n /p y t h on
I n s t a l l i n g s e t u p t o o l s , p i p , whe e l . . . done .
Каждая в иртуал ьная среда и м еет каталог Ь i n / , содержа щ и й двои ч н ы е файлы
Д11Я виртуальн ых сред Python и P I P. Когда вы запус каете оди н из этих двои ч н ых файлов,
вы автоматически помещаетесь в соответствующую виртуальную среду. Установите па­
кеты в среду, как обычно, запусти в копи ю команды pip в виртуальной среде .
Для того чтобы запустить виртуализованную программу Python из демона cron или
из сценария запуска систе м ы , явно укажите путь к правил ьной копи и python. (В кач е ­
стве альтернативы поместите путь в строку сценария . )
При интеракти вной работе в оболочке можно запустить сценарий Ь i n / activate
виртуальной среды , чтобы установить верс и и утилит python и pip в виртуальной сре­
де по умолчан ию. Сценарий перестраивает переменную РАТ Н вашей оболочки . Для того
чтобы покинуть виртуальную среду, испол ьзуйте команду deactivate .
Виртуал ьные среды привязаны к определенным версиям Python. Во врем я создания
виртуальной среды вы можете установить связанный двоичный код Python с помощью па­
раметра - -python virtualenv. В результате будет устаномен бинарны й файл Python.
RVM: менеджер enVironmen t для языка Ruby
В м ире Ruby все похоже , но несколько сложнее. Выше было указано, что мен еджер
Bundler может кеш ировать локальные копи и пакетов Ruby от и м е ни конкретного при ложения. Это разум н ы й подход при перемеще н и и проектов в производство, но это н е
так удобно дл я интерактивного использования. О н также предполагает, что вы хотите
использовать установленную версию Ruby.
Те, кто хочет получить более общее решение, должны подумать о менеджере RVМ , слож­
ном и довольно неудобном виртуализаторе среды, который использует несколько особен но­
стей оболочки. СправеД11 и вости ради отметим , что менеджер RVM я мяется чрезвычайно
отполированным примером " кривых костьиrей". Н а практике он работает плавно.
Менеджер RVM упрамяет как версиями Ruby, так и нескольки м и коллекциям и па­
кетов, и позволяет перекл ючаться между н и м и на ходу. Н апример, команда
$
rvm
ruЬy-2 . 3 . 0 @ ulsah
активирует Ruby верси и 2 . 3 . 0 и набор пакетов под названием u l s a h . Ссьmки на утилиты
ruby или gem теперь разрешаются в рамках указан н ых верс и й . Этот пример также ра­
ботает Д11 Я программ , устаномен н ых пакетами , таким и как bundle и rai l s . К счастью,
упрамение пакетами не изменилось; просто используйте пакет или комплект, как об ыч­
но, и все вновь устаноме н н ые пакеты автоматически попадут в нужное м есто.
Процедура установки менеджера RVM включает выбор сценария Bash из И н тернета
и его локальное выполнение. В настоящее время используются команды
$ curl - о / tmp/ install - s SL https : / /get . rvm . io
$ sudo bash/ tmp/ install staЫe
28 Как и в случае с другим и командами, связанными с языком Pythoп, существуют верси и кома нды
virtualenv с числовы ми суффиксами , которые поступают с определен н ы м и версиями Pyt hoп .
264
Часть 1. Основы администрирования
но все же проверьте текущую версию и криптографическую подп ись на сайте rvm . i o .29
Обязател ьно проведите инсталляцию с помощью програ м м ы sudo , как показано выш е ;
есл и вы этого не сделаете , менеджер RVM настроит частную среду в ваш е м домаш не м
каталоге . (Это не страш но, но н ичто в производственной системе н е должно сс ылать­
ся на ваш домаш н и й каталог.) Кроме того, вам нужно будет добавить автори зова н н ы х
пользователей RVM в группу U N IX rvm.
После первоначальной установки RVM не испол ьзуйте sudo при установке пакетов
или изме н е н и и конфигураций RVM . Менеджер RVM контрол ирует доступ через член­
ство в группе rvm.
Менеджер RVM выпол няет свою работу автоматически , ман ипул ируя пере м е н н ы м и
среды оболочки и путем поиска. Следовательно, он должен быть включен в вашу среду
во время запуска оболочки при входе в систему. Когда вы устанавл иваете RVM на си­
стемном уровне , он вкл ючает сценарий rvm . sh с соответствующ и м и командами в файл
/etc /profi le . d. Н екоторые оболочки автоматически запускают эту заглушку. Есл и
это не так, необходимо я вно вы пол нить команду s ou r c e , которую вы можете добавить
в файлы запуска вашей оболочки:
s ou r c e / e t c / p r o f i l e . d / rvm . s h
Менеджер RVM н и как н е изменяет исходную установку Ruby, в частности сценарии, на­
ч инающиеся с
# ! / u s r / b i n / env ruby
С и м вол ы # ! в стандартном Ruby видят только системные пакеты. Следующий вариант
более гибкий :
# ! / u s r / b i n / env ruby
Он находит команду ruЬy в соответствии с контекстом RVM пользователя , который его
запускает.
Команда rvm install устанавл ивает новые верс и и язы ка Ruby. Эта фун кция RVМ
позволяет легко устанавл ивать нескол ько раз н ых верс и й Ruby. Ее следует п редпочесть
собстве н н ы м пакетам Ruby ваше й операционной систе м ы , которые редко обновляются .
Команда rvm i n s tall загружает двоич н ые файл ы , если они досту п н ы . Если н ет, она
устанавл ивает необходимые пакеты операционной систе м ы , а затем строит Ruby из ис­
ходного кода.
Вот как м ы можем настроить развертывание приложения Rails, которое , как извест­
но, совместимо с Ruby 2 . 2 . l .
$ rvm install ruЬy- 2 . 2 . 1
S e a r c h i n g f o r b i n a r y rub i e s , t h i s mi ght t a k e s ome t ime .
No b i n a r y rubi e s a va i l aЫ e f o r : ubunt u / 1 5 . 1 0 / x 8 6_ 6 4 / ru b y - 2 . 2 . 1 .
C o n t i n u i n g wi t h c omp i l a t i o n . P l e a s e r e a d ' rvm h e l p moun t ' t o g e t more
i n f o rma t i on on b i n a r y rubi e s .
C h e c k i n g r e q u i reme n t s f o r ubun t u .
I n s t a l l i n g r e q u i r e d p a c k a ge s : gaw k , l i b r e a d l i n e б - d e v , z l i Ь l g - d e v ,
l ibnc u r s e s 5 - d e v , a u t oma k e , l i bt o o l , b i s o n , l i b f f i - dev . . . . . . . . . . . . . . .
Requi reme n t s i n s t a l l a t i o n s u c c e s s f u l .
I n s t a l l i ng Ruby f r om s ou r c e t o : / u s r / l oc a l / rvm / rubi e s / ruby- 2 . 2 . 1 , t h i s
ma y t a k e а wh i l e depending o n y o u r cpu ( s ) . . .
.
29 С м . ком м е нтар и и о том , почему н а ш и команды н е соответствуют ре коме нда ц и я м RVM ,
в разделе 1 . 1 0.
Глава 7 . Сценарии и командная оболочка
265
Если вы установили RVM , к а к описано выш е , система Ruby устанавливается в ката­
логе /usr/local/rvm и доступна для всех учетных записей в системе.
Для поиска версии RVM следует испол ьзовать команду rvm first known, которая ,
как известно, знает, как выполнять загрузку и сборку. Команда rvm l i s t выводит спи­
сок уже установленных и доступных для испол ьзования пакетов RVM .
$ cd myproject . rails
$ rvm ruЬy-2 . 2 . l @ myproj ect - - create - - default - -ruЬy-version
rub y - 2 . 2 . 1 - # g ems e t c r e a t e d / u s r / l oc a l / rvm/ gems / ru b y - 2 . 2 . l @ myp r o j e c t
rub y - 2 . 2 . 1 - # ge n e r a t i n g myp r o j e c t wrappe r s . . . . . . . . . .
$ gem install bundler
Fetching : bundl e r - 1 . 1 1 . 2 . gem ( 1 0 0 % )
Succ e s s fu l l y i n s t a l l e d bundl e r - 1 . 1 1 . 2
1 gem i n s t a l l e d
$ bundle
Fetching gem me t a d a t a f rom h t t p s : / / rubygems . o r g / . . . . . . . . . . .
Fetchin g ve r s i o n me t a d a t a f r om h t t p s : / / rubygem s . o r g / . . .
Fetching dependency me t a d a t a f r om h t t p s : / / rubygems . o r g / . .
Re solving dependenc i e s . . . . . .
Строка ruby - 2 . 2 . l @ mypro j ect задает версии Ruby и комплекта пакетов. Флаг
--create создает комплект п акетов, если он еще н е существует. Флаг - - default уста­
навливает эту комбинацию по умолчани ю , а флаг - ruЬy-vers ion записывает и м е н а
интерпретатора Ruby и компле кта пакетов в файлы . ruЬy-version и ruЬy-gemset
в текущем каталоге.
Если файл * -ver s i on существует, то менеджер RVM автоматически считывает
и оценивает их при работе со сценариями в этом каталоге. Эта функция позволяет каж­
дому проекту указывать свои собственные требован ия и освобождает вас от необходи­
мости помн ить, что с ним связано.
Чтобы запустить пакет в запрошенной среде ( как описано в файлах ruЬy-version
и ruЬy-gemset) , выпол ните команду
.
.
.
.
rvm
in /путь /к/ка талогу do кома нда - з а пуска аргументы_ з а пуска . . .
Это удобн ы й синтаксис для испол ьзования при запуске заданий и з сценариев запу­
ска или демона cron. Он не зависит от текущего пользователя , настраивающего RVM ,
или от конфигурации RVM текущего пользователя .
В качестве ал ьтернативы можно указать я вную среду дл я команды, например:
rvm rub y - 2 . 2 . l @ myp r o j e c t do команда -за пуска аргументы_ за пуска . . .
Однако существует и третий вариант - запустить двоич н ы й код ruЬy изнутри обо­
лочки, поддерживаемой RУМ для этой цел и . Например, команда
/usr/local/ rvm/wrappers/ruЬy-2 . 2 . l @ myproject/ruЬy
автоматически переносит вас в мир Ruby 2 . 2 . l .
7 8 КОНТРОЛЬ ВЕРСИЙ С ПОМОЩЬЮ СИСТЕМЫ G1т
.
.
Ош ибки неизбежн ы. Важно следить за изменениями конфигурации и кода, чтобы,
когда эти изменения вызовут проблемы, можно было легко вернуться к известному бла­
гополучному состоянию. Системы контроля версий - это програ м м н ые средства, кото­
рые отслеживают, архивируют и предоставляют доступ к нескольким версиям файлов.
Часть 1 . Основы администрирования
266
С исте м ы контроля верс и й ре шают ряд пробл е м . Во- первых, они определя ют орга­
н изо ва н н ы й с п особ отсл е ж и ва н и я истори и изме н е н и й в файл е , чтобы эти изменения
можно было понять в контексте и чтобы можно было восстановить более ран н ие вер­
с и и . Во- вторы х , они рас ш и р я ют кон цепцию верс и й выше уровня отдел ьн ы х файлов.
Связа н н ы е груп п ы файлов могут быть сопоставл е н ы вместе с учетом их взаимозависи ­
м осте й . Наконец, систе м ы контроля версий координ ируют действия н ескол ьких редак­
торов, поэтому условия гонки не могут привести к тому, что ч ьи -л ибо изменения будут
окон чательно потеряныJ0, и поэтому несовместим ы е изменен ия от нескол ьких редакто­
ров не станут акти в н ы м и одновре менно.
Самой попул я р н о й в н астоящее вре м я систе мой я вляется G it , единолично создан ­
ная Л и н усом Торвальдсом ( Linus Torvalds) . Л и нус создал с истему G i t для управл е н ия ис­
ходн ы м кодом ядра Li nux из-за его разочарования в систе мах контроля верс и й , которые
сушествовал и в то вре м я . В настоящее время он является таким же вездесущи м и вли я ­
тельн ы м , к а к Linux. Трудно с казать, какие из этих изобрете н и й Л и нуса оказал и бол ьшее
влия н и е на м ир .
Больш и нство совре м е н н ы х програм м разработано с помощью систе м ы G it , и , как
резул ьтат, адм и н и страторы стал к и ваются с н и м ежедн евно. Вы можете н а йти , загру­
зить и в нести в кл ад в проекты с открытым исходны м кодом на G it H ub , Git Lab и других
сайтах колл е ктивной разработки. В ы также можете испол ьзовать систему G it для отсле­
живания изме н е н и й в сце н ар и я х , коде управл е н и я конфигурацией , шаблонах и л юбых
других текстовых файлах , которые н еобходимо отслеживать с теч е н и е м вре м е н и . М ы
испол ьзуем Git дл я отслеживан и я содержания этой книги. Он хорошо подходит для со­
вместной работы и совместного использован и я , что делает его важ н ы м и н струме нтом
для сайтов, которые охваты вают DevOps.
W
Для получения дополнител ьной и нформации о DevOps см. раздел 3 1 . 1 .
П р елесть с и сте м ы G it состоит в том , что у нее нет выделен ного центрального хра­
н ил и ща. Чтобы получить доступ к хранили щу, кло н ируйте его ( вкл ючая вс ю е го исто ­
р и ю) и нос ите с собо й , ка к ул итка свою раковину. Ваш и фиксаци и в хран или щ е - это
локал ьные о перации , поэтому они выпол н я ются быстро, и вам не нужно беспокоиться
о с вязи с централ ьным сервером .
Систе ма Git использует интеллектуальную с истему сжатия, чтобы сн изить стоимость
хра н е н и я все й истор и и , и в больш инстве случаев эта с истема достаточно эффективна.
Система G it отл и ч н о подходит для разработч иков, потому что о н и могут с ворачи ­
вать исходный код н а ноутбук и работать б е з подкл ючения к сети , сохраняя п р и этом
все преимущества контроля версий. Когда придет время и нтегрировать работу несколь­
ких разработчиков, их измен е н и я могут быть и нтегрирова н ы из одной копи и хранил и ­
щ а в другую любым с пособо м , которы й подходит для рабочего процесса орган и за ц и и .
Всегда можно развернуть д в е коп и и хранил ища обратно в их общее состоя ние предка,
независимо от того , скол ько изменений и итерац и й произошло после раскола.
И с пол ьзова н и е л о кал ьного хранил ища
G i t - бол ьш о й шаг вперед в управл е н и и
верс и я м и - или , возможно, бол ее точ но, это бол ьшой ш а г назад, но в хорошем с м ыс ­
л е . Ран ни е с исте м ы контроля верс и й , такие к а к RCS и CVS, испол ьзовал и локальн ые
хран ил ища, но не могл и обеспе ч и вать совместную работу, слия н и е и з м е н е н и й и не-
1 0Напр и мер, п редположи м , ч то системные адм и н истраторы Алиса и Боб оба редактируют оди н и
тот же файл и кажды й из н и х в н ос и т некоторые изменен и я . Алиса сохран я ет файл первой. Когда
Боб сохраняет свою копи ю файла . он перезаписывает версию Али с ы . П осле того как Алиса выйдет
из редактора , ее изменени я полностью и бесследно исчезнут.
Глава 7. Сценарии и командная оболочка
267
зависимую разработку проектов. В н астоящее время установка файлов под контрол е м
версий - это быстрая , простая и локальная операция. В т о ж е время в с е рас ш иренные
возможности совместной работы G it доступн ы для испол ьзования в соответствующих
ситуациях.
Систем а G it обладает сотнями функций и может быть довольно сложной в испол ьзо­
вании. Тем не менее большинство пользователе й Git обойдутся лишь нескольким и про­
стым и командами. Особые ситуации луч ш е всего обрабатывать путем поиска в Googl e
описания того, что вы хотите сделать (например, "git undo last commit " ) . В первую оче­
редь Google , конечно же , предложит посетить сайт Stack Overflow и н айти дискуссию,
которая точ но соответствует вашей ситуаци и . П режде всего, н е пан и куйте. Даже если
вам кажется , что вы испортили хранилище и удалили результаты работы за последн ие
несколько часов, в системе Git, скорее всего, есть скрытая копия. Вам просто нужно ис ­
пользовать флан re f l o g и найти ее.
Прежде ч е м в ы начнете испол ьзовать систему Git, укажите с вое имя и адрес элек­
трон ной почты :
$ qit confiq - - qlobal user . name " John Q . Ulsah"
$ qi t confiq - - qlobal user . email "ulsah@ admin . com"
Эти команды создают ini-файл конфигураци и G it -1 . gi tconfig, если он еще не су­
ществует. Более поздние команды git ч итают этот файл для н астройки конфигураци и .
Система Git предоставляет пользователя м ш ирокие возможности для настройки рабоче­
го процесса.
Простой пример Git
Мы разработали простое хранилище примеров для поддержки некоторых сценариев
оболочки. На практике вы можете испол ьзовать Git для отслеживания кода управления
конфигурацией, шаблонов инфраструктуры , с пециальных сценариев, текстовых докумен ­
тов, статических веб-сайтов и всего, что вам нужно дл я работы в течение долгого времени.
Следующие команды создают новое хранилище G it и заполняют его:
$ pwd
/home /bwh a l e y
$ mkdir s cripts & & c d scripts
$ qit ini t
I ni t i a l i z e d emp t y G i t r e po s i t o r y i n /home /bwha l e y / s c r i p t s / . gi t /
$ cat > super- script . sh << EOF
> lt ! /Ьin/ sh
> echo " Hello , world"
> EOF
$ chmod +х super- script . sh
$ qit add .
$ qi t commit -m " Initial commi t "
[ ma s t e r ( r o o t - c ommi t ) 9 a 4 d 9 0 c ] supe r - s c r i p t . s h
1 f i l e chang e d , О i n s e r t i on s ( + ) , О de l e t i on s ( - )
c r e a t e mode 1 0 0 7 5 5 supe r - s c r i p t . s h
В приведен ной выше последовательности команда gi t ini t создает инфраструктуру
хранилища, создавая каталог . gi t в каталоге /home/bwhaley/ scripts. После того как
вы создадите исходный сценарий "hel\o, world" , добавьте команду git add . Она копирует
ero в " индекс" Git, который является промежуточной областью для предстоящей фиксации.
Индекс - это не просто список файлов для фиксации; это дерево файлов, каждое из
которых является таким же реальным, как текущий рабочий каталог и содержимое храни-
268
Часть 1. Основы администрирования
лища. Файлы в индексе имеют содержимое, и в зависимости от того, какие команды вы вы­
полняете , это содержимое может отличаться как от хранилища, так и от рабочего каталога.
Команда git add на самом деле просто означает "ер из рабочего каталога в индекс " .
Команда gi t commi t вводит содержимое и ндекса в хранилище. Для каждой фикса­
ции требуется сообщен и е журнала. Флаг -m позволяет вкл юч ить сообщение в команд­
ной строке. Если вы оставите это, команда gi t запустит для вас редактор .
Теперь внесите изменения и проверьте их в хран ил ище.
$ vi super- script . sh
$ gi t commi t super- s cript . sh -m 11маdе the script more super "
[ ma s t e r 6 7 5 1 4 f l ] Made t h e s c r i p t mo r e s up e r
1 f i l e c h a n g e d , 1 i n s e r t i on s ( + ) , О d e l e t i on s ( - )
И менован и е модифицированн ы х файлов в командной строке gi t
commi t обходит
обычное испол ьзован ие Git и ндекса и создает вариант, которы й вкл ючает только изме­
нения в указанные файлы . Существующий и ндекс остается неизменн ы м , и система Git
и гнорирует любые другие файл ы , которые могут быть измен е н ы .
Если изменение с вязано с нескольким и файлам и , существуют нескол ько вариантов.
Есл и вы точ но знаете , какие файл ы были измен е н ы , вы всегда можете их перечислить
в командной строке , как показано выше. Если вы ленивы, то можете выполнить команду
git commit - а , чтобы с истема Git добавляла все измененные файлы в и ндекс перед в ы ­
полнением фиксации. Однако у этого последнего варианта есть пара подводных камней.
Во-первых, могут быть изм е н е н ы файл ы , которые вы не хотите включать в ф и кса­
цию. Напри м е р , есл и у сценария super-script . sh был файл конфигураци и , и вы из­
м е н ил и этот файл конфигурации для отладки , вы можете н е захотеть перенести изме­
ненный файл обратно в хранил ище.
Вторая проблема закл ючается в том , что команда git
commit - а выбирает только
изменения в файлах , которые в настоя щее врем я находятся под управл е н и е м систе м ы
контроля верс и й . Он н е отображает новые файл ы , которые в ы , возможн о , создали в ра­
боч е м каталоге .
Для обзора состоя н ия с исте м ы G it вы можете вы пол н ить команду get
s tatu s . Эта
команда сообщает вам о новых, измен е н н ых и и нде кс и рован ных файлах. Н априм е р ,
предпол ожим , ч т о в ы добавили с ц е н а р и й more - s c r i p t s / an o the r - s c r ip t . s h .
Система Git может показать следующее.
$ gi t s tatus
On b ranch ma s t e r
Chan ge s n o t s t a g e d f o r commi t :
( u s e " gi t add < f i l e > . . . " to upd a t e wh a t wi l l Ье commi t t e d )
( u s e " g i t c h e c kout - - < f i l e > . . . " t o di s c a r d change s i n wo r ki n g d i r e c t o r y )
modi f i e d : s up e r - s c r ip t . s h
U n t r a c ke d f i l e s :
( u s e " g i t add < f i l e > . . . " t o i n c l u de in wh a t wi l l Ье commi t t e d )
mo r e - s c r i p t s /
tmp f i l e
n o change s added t o commi t ( u s e " gi t add " and / o r " g i t commi t - а " )
Сценарий another- script . sh не указан по и м е н и , потому что система Git еще н е
видит каталог m o re - s c r i p t s , который его содержит. Вы можете видеть, что сценар и й
super-script . sh был изменен , а также увидеть файл tmpfile, котор ы й , вероятно, не
super ­
script . s h , чтобы увидеть изм е н е н и я , внесен н ы е в сценар и й . Команда gi t предлагает
должен быть включен в хранилище. Вы можете выпол н ить команду gi t diff
команды для следующих операц и й , которые вы можете вы пол н ить.
глава 7 . Сценарии и командная оболочка
269
Предположим , в ы хотите отследить изменения в файле super-script . sh отдельно
от вашего ново го файла another- script . sh.
$ git colllllli. t super- s cript . sh -m " The mos t super change yet "
C r e a t e d c ommi t б f 7 8 5 З с : T h e mo s t s u p e r change y e t
1 f i l e s c h a n ge d , 1 i n s e r t i on s ( + ) , О de l e t i on s ( - )
Для того чтобы искорен ить файл tmpfi le из систе м ы Git, создайте ил и отредакти­
руйте файл
.
gi tignore и пом естите в него имя файла. Это заставляет систему G it игно­
рировать файл tmpfile раз и навсегда. Шаблон ы в тоже работают.
$ echo tmpfile >> . gi tignore
Наконе ц , зафиксируйте все сделанные изме н е н и я .
$ git add .
$ sudo git commi t -m " Ignore tmpfile ; Add another- script . sh to the repo "
C r e a t e d commi t 3 2 9 7 8 е б : I gn o r e tmp f i l e ; add a n o t he r - s c r i p t . s h t o t h e r e p o
2 f i l e s c h a n ge d , 2 i n s e r t i on s ( + ) , О de l e t i on s ( - )
c r e a t e mode 1 0 0 6 4 4 . gi t i g n o r e
c r e a t e mode 1 0 0 7 5 5 more - s c ri p t s / a n o t he r - s c r i p t . s h
Обратите внимание на то, что сам файл
.
gi tignore становится частью управляемого
набора файлов, который обычно вы хотите. Зачастую приходится повторно добавлять фай­
лы, которые уже находятся под контролем , поэтому команда gi t add
-
это простой способ
сказать: "Я хочу, чтобы образ нового хранилища выглядел как рабочий каталог, за исключе­
нием того, что указано в
gi tignore" . В этой ситуации нельзя просто выполн ить команду
another-script . sh и . gi tignore; эти
файлы являются новым и Д11 Я системы Git и поэтому должны быть явно добавлены.
gi t commi t
.
- а , потому что она не найдет файлы
Л овушки G it
Для того чтобы заставить вас думать, что с исте ма Git управляет файлам и разр е ш е ­
ний, а также их содержим ы м , о н а показывает в а м режим ы файлов при добавл е н и и но­
вых файлов в хранили щ е . Это н еправда ; с исте ма Git не отслеживает режи м ы , владель­
цев ил и вре мя модификации.
Система Git отслеживает бит исполнения. Если вы выпол няете сценар и й с установ­
ленным битом исполнения, л юбые будущие клоны также испол няютс я . Однако н е сле­
дует ожидать, что система Git будет отслеживать право собственности или статус "только
Д11 Я чте ния " . Следствием является то , что вы не можете рассчитывать на испол ьзование
систем ы G it для восстановления сложных иерархий файлов в с итуациях, когда важ н ы
права собственности и разрешения .
Другим следствием является то, что в хранилище Git н икогда нельзя включать простые
текстовые пароли и другие секреты. Они не только открыты Д11 Я всех, кто имеет доступ
к хранилищу, но также могут бьпь непреднамеренно распакованы в форме, доступной миру.
Коллективное кодирова н ие с помощью системы G it
Появл е н и е и б ыстр ы й рост сайтов колл е ктивной разработки , таких как G it H ub
и Git Lab, я вляется одн им из самых важных тенденций в нове й ш е й компьютерной исто­
рии . М илл ион ы проектов программного обеспечения с открытым исходны м кодом соз­
даются и п розрачн о управля ются огром н ы м и сообщества м и разработчи ков, которые
испол ьзуют все м ы сл и м ы е языки . П рограм мное обеспечение н икогда н е б ыло проще
создавать и рас пространять.
270
Часть 1. Основы администрирования
G itHub и Git Lab - это, по сути, хранилища Git с множеством дополнительных функ­
ций, связанн ы х с коммуникацией и рабочим процессом. Хранилище может создать лю­
бой человек. Хранилища доступны как благодаря команде gi t, так и в И нтернете. Веб­
и нтерфейс дружелюбен и предлагает функции поддержки сотрудничества и интеграции.
О п ыт коллективного кодирования может быть несколько пугающим для новичков,
но на самом деле это н е сложно, как только будут поняты некоторые основные терми н ы
и методология.
•
•
•
" Master" - это имя по умолчани ю , назначенное первой ветви в новом хранил и ще .
Большинство программных проектов п о умолчан ию испол ьзуют это и м я в каче­
стве основной линии разработки, хотя у некоторых главная ветвь может отсутство­
вать. Главной ветвью обычно управл яют, чтобы поддерживать текущий, но рабо­
тоспособный код; разработка нового кода происходит в другом месте. Последняя
фиксация называется вершиной главной ветви.
Ветвление (fork) в системе G it Hub представляет собой моментальный снимок хра­
н ил ища в определ е н н ы й момент времени. Ветвления возн икают, когда у пол ьзо­
вателя нет разреш е н ия на изменение основного хранилища, но он хочет внести
изменени я , либо для дал ьнейшей интеграции с основным проектом , либо для соз­
дания совершен но отдельного пути разработки .
Запрос на вкл ючение (pull request) - это запрос на объеди н е н и е изменений из
одной ветви или ветвления в другую. Они ч итаются сторонн и м и разработчи ками
целевого проекта и могут быть приняты для включения кода других пользователей
и разработчи ков. Каждый запрос на включение также является н итью дискуссии,
поэтом у ком м е нтировать предполагаемые обновления кода могут как владелец,
так и л юбой другой человек.
•
Разработчи к (committer) и специалист по эксплуатации (maintainer) - это л и цо,
у которого есть доступ к хранил и щу для записи. Для крупных проектов с откры­
тым исходным кодом этот очень желанн ы й статус предоставляется только дове­
ренным разработчикам, которые имеют долгую историю вкладов.
Вам часто придется обращаться в хранилище Git Hub или G it Lab , чтобы найти или
обновить часть программ ного обеспечения. Убедитесь, что вы просматриваете главное
хранилище, а не случайное ветвлен ие. Обратите внимание на ближайшую м етку "ответ­
вление от" и следуйте за ней.
Будьте осторож н ы при оценке нового програ м м ного обеспеч е н и я с этих сайтов.
Н иже приведе н ы нескол ько вопросов , которые стоит обдумать, прежде чем запус кать
случайную часть нового программного обеспечения на своих ком пьютерах.
•
Сколько участников принимали участие в разработке?
•
Означает ли история фиксации , что разработка я вляется недавней и регулярной?
•
Какова лицензия и совместима л и она с потребностя м и вашей орган изации?
•
•
На каком языке написано п рогра м м ное обеспече н и е , и знаете л и вы , как им
управлять?
Достаточ но ли докуме нтации для эффективного ис пол ьзован ия программного
обеспечения?
Больши нство проектов имеют определенную стратегию ветвления, на которую они
полагаются , чтобы отслеживать изменения программного обеспечения. Некоторые сто­
ронн и ки настаивают на строгом соблюдении выбранной и м и стратегии , а другие - более
снисходительны . Одной из наиболее ш ироко используемых является модель Git Row, раз-
Глава 7. Сценарии и командная оболочка
271
работан ная Винсентом Дриссеном (Vincent Driessen); дополн итель н ую и нформацию см.
на сайте goo . g l / GD a F. П режде чем вносить свой вклад в проект, ознакомьтесь с методами
ero разработки , чтобы помочь специалистам , которые его сопровождают.
Прежде всего, пом н ите , что разработчики с открытым исходным кодом часто не по­
лучают н и какой платы. Участвуя в коллективной разра б от к е и поддержи вая проекты ,
они ценят терпение и вежливость.
7.9. ЛИТЕРАТУРА
•
B Rooкs, FREDER1cк Р. J R . The Mythical Man - Month : Essays оп Software Engineering.
Reading, МА: Addisoп-Wesley, 1 995 .
•
СнлсоN , Sсотт, AN D SтRA u в , B E N . Pro Git, 2nd edition. 2014. g i t - s c m . c om / b o o k /
e n / v 2 . Исчер п ы вающая книга о Pro Git, свободно оп убл и ко в а н н ая п о лицензии
Creative Commons.
Оболоч ки и сцена рии оболоч ки
•
Roв в 1 N s , ARNOLD, AN D №LsoN Н . F. В Е Е В Е . Classic Shell Scrlpting. Sebastopol , СА:
O ' Reilly Media, 2005. Книга, посвященная тр адиц и он ному (и переносимому ) диа­
лекту оболочки Boume. Она также содержит довольно м ного и нфор м ац и и об ути­
литах sed и awk.
•
PoWERs , S н ELLEY, J ERRY РЕЕК, Т1м O RE I LLY , AND М1кЕ LotJКIDES. Unix Power Too/s, (Зrd
Edition) , Sebastopol, СА: O ' Reilly Media, 2002. Классическая книга о с истеме U N IX,
охватывающая м ного вопросов, в том ч исле с це н ар и и дл я о бол оч к и sh и работу
с командной строкой . Некоторые разделы несколько устарел и , но матери ал , каса­
ющийся оболочек, остается актуальн ы м .
•
SoвELL, М д R К G . А Practical Guide to Linux Comm a nds, Editors, and Shell Programming.
Upper Saddle River, NJ: Prentice Н а\ \ , 20 1 2 . Книга заслуж и вает в н и ман ия , пос коль­
ку в ней описываются оболочки tcsh и bash.
•
S ноттs , W1 L L 1 л м Е . , J R . The Linux Command Line: А Comple te lntroductio n . San
Francisco, СА: No Starch Press , 20 1 2 . Книга по с в я ще н а оболочке bash, н о в ней
также есть материал об и нтеракти вной работе и п рограм м ирован и и . Бол ьшая
часть материала относится к системам U N IX и Linux.
•
В ш м , R 1 с н л R о , AND C н R1sп N E BRESNAHAN . Linux Command Lin e and Shell Scripting
ВiЬ/е (Зrd Edition). l ndianapo\is, I N : John Wiley & Sons, Inc. 20 1 5. Кн ига посвя щ е на,
в основном , оболоч кам , в частности оболочке bash.
•
CooPER, M E N D EL. Advanced Bash -Scripting Guide. www . t l d p . o r g / L D P / a b s / h t m l .
Свободно распространяемая и легко доступн ая в И н те р н ете книга. Не с м отря на ее
название, новички ее легко поймут благодаря м ножеству хорош и х п р имеро в .
'
Регулярные вы ражения
•
FRIEDL, J EFFREY. Mastering Regular Expressions (Зrd Edition) , Sebastopol , СА: O ' Reilly
M edia, 2006.
•
GovvлERтs , JлN AN D SтEVEN LЕvпнлN. Regular Expressions Cookbook. Sebastopol , СА:
O ' Reilly Media, 20 1 2.
272
Часть 1 . Основы администрирования
•
G oYVAE RTS , J AN . r e g u l a r - e x p re s s i o n s . i n f o . П одробный интерактивный источ­
ник информаци и о регулярных выражен иях с учетом всевозможных диалектов.
•
KR U M I NS , PEТ E R I S . Perl Oпe-Liпers: 130 Prograтs That Get Thiпgs Dопе. San Francisco,
СА: No Starch Press, 20 1 3 .
Python
•
SwE I GART, A L . Аиtотаtе the Boriпg Stиff with Pythoп: Practical Prograттiпg for Total
Begiппers. San Franc isco, СА: No Starch Press, 20 1 5 . Удачное введен и е в програм ­
м и рование н а языке Python 3 и програ м мирование в целом . Содержит м ножество
при меров систем ного администрирован ия . (Эл СвЕйГАРТ. Автоматизация рутинных
задач с помощью Pythoп: практическое руководство для начинающих, пер. с англ . ,
изд. "Диалекти ка" , 20 1 6. )
•
•
•
•
•
•
P t LG R I M , MARK. Dive /пtо Pythoп . Berkeley, СА: Apress, 2004. Класс ическая к н и га
о языке Python 2 , свободно доступная на веб-сайте d i ve i n t opython . n e t .
P 1 LG R I M МАRк. Dive /пtо Pythoп 3. Berkeley, СА: Apress, 2009. Dive l nto Python updated
for Python 3. Кн ига свободно доступна на веб-сайте di ve i n t opython З . n e t .
,
Luтz, МлRк. Learпiпg Pythoп, 5th Editioп. O ' Reilly, 20 1 3 . Фундаментал ьная книга о
языке Pytho n . ( M A P K Л УГц. Изучаем Pythoп, 5-е издание, в двух томах, пер. с англ "
изд. "Диалектика " , 20 1 9 . )
RАмл L но Luc1лNo. F/иепt Pythoп . Sebastopol , СА: O ' Reilly Media, 20 1 5 . Advanced ,
idiomatic Python 3 .
,
B EAZLEY, Dлvю, A N D BRtAN К. J o N E S . Pythoп Cookbook (3rd Editioп) , Sebastopol , СА:
O ' Reilly Media, 20 1 3 . Covers Python 3.
G t тт , N олн, A N D J E R EMY М . J o N E s . Pythoп for Uпix апd L iпих Systeт Adтiпistrators,
Sebastopol , СА: O ' Reilly M edia, 2008.
Ruby
•
F LA NAGAN , Dлvю , A N D Уuк 1 н 1 Rо Млтs u м ото . The RиЬу Prograттiпg Laпgиage.
Sebastopol , СА: O ' Reilly Media, 2008 . Классическая , исчерпывающая и хорошо на­
п исанная книга о языке Ruby из первых рук. Она уже нем ного устарела и не уч и­
тывает Ruby 2.0 и более новые версии; однако языковые различия между н и м и яв­
ляются м и н и мал ьн ы м и .
•
В LАск, Dлvю А . The Well-Groипded Rиbyist (2пd Editioп). Shelter lsland, N Y: Manning
PuЫicat ions, 20 1 4. Н е бойтесь назва н и я , которое может отпугнуть новичков; это
хорошая , основател ьная книга о языке Ruby 2. 1 .
•
Тномлs, DAVE. Prograттiпg RиЬу 1. 9 & 2. 0: 1he Pragmatic Prograттer's Gиide (4th Editioп).
Pragmatic Вoo kshelf, 20 1 3 . Classic and frequently updated.
•
F u Lтo N , HAL. The RиЬу Way: Solиtioпs апd Techпiqиes iп RиЬу Prograттiпg (3rd Editioп).
U pper Saddle River, NJ: Addison-Wesley, 20 1 5. Еще оди н классический и современ­
ный с правоч н и к по языку Ruby, с легким философским уклоном .
глава
8
Управление учетными
записями п ользовател ей
Современные вычислительные среды состоят из физического оборудования, облач­
ных систем и виртуальных хостов. Гибкость этой гибридной и нфраструктуры порождает
растущую потребность в централизован ном и структурированном управл е н и и учетн ы ­
ми записям и . Системные адми нистраторы должны понимать как традиционную модель
учетных записе й , используем ую U N IX и Linux, так и с пособы рас ширен ия этой модели
для и нтеграции с таким и службам и каталогов, как LDAP и M icrosoft Active Directory.
Правильное управление учетны м и записями является ключевым фактором безопас­
ности систе м ы . Редко используемые учетные записи, а также учетны е записи с ле гко
угады вае м ы м и п ароля м и являются основн ы м и целям и для злоу м ы шле н н и ков. Даже
если вы используете автоматизированные инструменты ваш е й с истем ы для добавления
и удаления пользователе й , важно пон имать измен е н и я , которые осуществляют эти ин­
струменты. По этой причине м ы нач инаем обсуждение управлен ия учетными записями
с простых файлов, которые необходимо изменить, чтобы добавить пользователей авто­
номного комп ьютера. В последующих разделах мы рассмотри м команды управления бо­
лее высокого уровн я , которые поставляются с наш и м и демонстрацио н н ы м и примерами
операцион ных систе м , и файлы конфигурации , которые контрол ируют их поведение.
В большинстве систем также есть простые и нструменты с графическим пользователь­
ским интерфейсом для добавления и удаления пользователей, но они, как правило, не под­
держивают дополнительные функции , такие как пакетный режим или рас ширенная лока­
лизация. Эти инструменты достаточно простые, поэтому мы не считаем целесообразным
детально анализировать их работу и в этой главе будем использовать командную строку.
Часть 1. Основы администрирования
2 74
В этой главе мы сосредоточ имся искл юч ител ьно на добавл е н и и и удал е н и и пол ьзо­
вателей. М ногие тем ы , связан н ы е с управлен ие м учетн ы м и зап ися м и , описан ы в других
главах (здесь вы найдете соответствующие ссылки).
•
•
•
•
П одкл ючае м ые м одул и ауте н т и ф и каци и (pl uggaЬ l e aut h e nt i c at i o п modules РАМ ) для ш ифрован ия паролей и обеспече н и я их стой кости, описан ы в главе 1 7
(см. раздел 1 7 . 3 ) .
Хранилища паролей оп исан ы в главе 27 (см . раздел 27.4).
Службы каталогов, такие как Ope n LDAP и Active Directory, рассматри ваются в гла­
ве 1 7 (см. раздел 1 7 . 2 ) .
Наконец, политические и п равовые вопросы яаляются основны м и темами главы 3 1 .
8. 1 . Основы УПРАВЛЕНИЯ УЧЕТНЫМИ ЗАПИСЯМИ
По существу, пользователь предстааляет собой всего л и ш ь число, 32-битное целое чис­
ло без знака, известное как идентификатор пользователя , ID ил и U I D. Почти все, что свя­
зано с упраалением учетн ы м и запися ми пользователей, вращается вокруг этого числа.
Система определяет и нтерфейс при кладного програм мирования (через стандартн ые
подпрогра м м ы библиотеки С ) , который осущесталяет п рямое и обратное отображе ние
между идентифи каторами U I D и более пол н ы м и н абора м и с веде н и й о пол ьзователях.
Например, фун кция getpwuid ( ) п р и н имает U I D в качестве аргуме нта и возвращает
соответствующую запись, содержащую имена пол ьзователя и е го домашнего каталога.
Аналогично фун кция getpwnam ( ) просматри вает эту же информацию по имени учетной
записи.
Традицион н о эти библ иотеч н ые фун кции получал и аргументы непосредстве нно из
текстового файл а /etc/pas swd. Со временем о н и начал и поддержи вать допол н итель­
ные источ ники информации , такие как сетевые информацион н ы е базы дан н ых (напри­
мер, L DAP) и файл ы с защитой от чте н и я , в которых заш ифрован н ые парол и можно
было бы хран ить более надежно.
Эти уровни абстракции ( которые часто устанаалива ются в файле ns swi tch . conf)
позволяют фун кциям более высокого уровня фун кционировать без достоверного знания
ис пользуемого метода управл е н и я базой дан н ых. Например, когда в ы входите в систе­
му как d o t t y , процесс регистрации (Window Serve r, login, getty или что-то еще) при­
меняет к этому и м е н и фун кцию getpwnam ( ) , а затем сравн и вает парол ь , который вы
вводите , с е го заш ифрованной зап исью, возвращаемой библ иотеко й , независимо от его
фактического источ н ика.
Мы нач инаем с подкаталога /etc/pas swd, которы й по- прежнему поддержи вается
везде. Другие варианты воспроизводят эту модель, есл и не по форме, то по духу.
W Допол нительную информаци ю о файле ns switch . conf см. в разделе 1 7. З .
8.2. ФАйЛ /Eтc / PASSWD
Файл /etc/passwd содержит список пользователе й , которые известны системе. Его
можно расширить или заме н ить службой каталогов, поэтому е го можно считать пол н ы м
и достове р н ы м только в автономн ы х системах.
Традицион но заш ифрован н ы й пароль каждого пол ьзователя также хран ился в фай­
ле /etc /pas swd, которы й был доступен для чте н и я . Однако поя ал е н и е более мощных
процессоров повы с ил о вероятность взлома этих открытых парол е й . В ответ систе м ы
Глава 8. Управление учетными записями пользователей
275
U N IX и Linux переместили пароли в отдельны й файл (/etc/master . passwd в Free B S D
и /etc/ shadow в Linux), которы й защищен о т чтения. В наши дни с а м файл pas swd
содержит тол ько формал ьную запись, чтобы отметить прежнее местоположен ие поля
для ввода пароля (х в Linux и * в Fre e B S D) .
В процессе регистраци и пользователя с истема обращается к файлу / etc/pas swd
в поисках идентификатора пользователя и е го домашнего каталога , а также другой и н ­
формации. Каждая строка файла описывает одного пользователя и содержит семь следу­
ющих полей , разделенных двоеточиями:
• регистрационное имя;
• шифрованн ы й пароль или " запол нитель" пароля ( вопросы применения ш ифрованных паролей описа н ы далее в этом разделе);
• идентификатор пользователя U I D;
• идентификатор группы по умолчан ию G I D;
• поле G ECOS ( полное и м я , номер офиса, рабочи й и домашний телефоны ) ;
• домашн и й каталог;
• регистрационная оболочка.
Вот примеры правильно составленных записей файла /etc/passwd.
roo t : x : O : O : Th e S y s t e m , , х 6 0 9 6 , : / : / Ь i n / s h
j l : ! : l O O : O : Jim L a n e , E C OT B - 3 , , : / s t a f f / j l : /Ь i n / s h
dott y : x : l 0 1 : 2 0 : : /home /do t t y : / Ь i n / t c s h
m Дополнительную информацию о файле nsswi tch . conf с м . в разделе 1 7. 3 .
Если пользовательские учетные записи совместно испол ьзуются с помощью службы
каталогов, например L DA P, в файле pas swd появляются специальн ые записи , которые
начинаются с с и м вола " + " или " - " . Эти записи сообщают систе м е , как и нтегрировать
данные службы каталогов в содержимое файла /etc/pas swd. Эта интеграция также мо­
жет быть реализована в файле / etc/nsswi tch . conf.
В следующих разделах м ы рассмотри м поля файла /etc/passwd более подробно.
Регистрационное имя
Регистрацион н ы е имена ( называемые также именами пользователей) должн ы быть
уникальн ы м и и в зависимости от с исте м ы могут иметь ограничения на длину и н абор
символов. В настоящее время во всех версиях систем UN IX и Linux эта длина не превы­
шает 32 символа.
Пользовательские имена не могут содержать двоеточия и символы новой строки , по­
скольку эти с и м волы применяются в качестве разделителей полей и зап исей соответ­
стве нно в файле passwd. В зависимости от с исте м ы на пользовательские имена могут
быть наложе н ы и другие о гра н и ч е н и я . В с истем е Ubuntu эти огра н и ч е н ия наиболее
слабые , поскольку они допус кают и м е н а , нач инающиеся или цели ко м состоящие из
чисел и других специальных символов. ' П о м ногочисленным причи н а м , которые было
бы сли ш ком долго объяснять, м ы рекомендуем огран ичивать допусти м ы й диапазон ре­
гистрационн ых имен алфавитно-цифров ы м и с и м волами , испол ьзовать только н ижн и й
регистр и начинать и м е н а с буквы .
Регистрацио н н ы е и м е н а чувствител ьны к регистру. Нам неизвестн ы случ а и . ког­
да смешен ие регистров в именах приводило бы к возникнове н и ю проблем , но имена,
1 По какой-то непостижи мой причине допустимый набор символов в U nicode включает эмотиконы .
Эrо делает нас © .
часть 1. Основы администрирования
276
состоящие из строч ных букв , считаются традицион н ы м и , к тому же их проще вводить.
Есл и , например , такие регистрационные имена, как j oh n и Joh n , будут принадлежать
различ н ы м л юдя м , проблемы обязател ьно возникнут.
Следует выбирать такие регистрационные имена, которые легко запомнить, поэтому
имя, состоящее из случайной последовательности букв, я вляется не сам ым удачн ы м ва­
риантом. П оскольку регистрацион н ые имена часто используются в адресах электрон ной
почт ы , полезно определ ить стандартную процедуру их формировани я . П ол ьзователя м
должна быть предоставлена возможность делать обоснованные предположен и я о реги­
страционн ых и м енах друг друга. И мена, фам ил и и , и н и циалы и сочетания этих эле мен ­
тов - вот приемлемые варианты для схе м формирования имен.2
Л юбая жестко заданная схема в конечном счете приводит к поя вл е н и ю дубли катов
ил и сли ш ком дл и н н ых и м е н , поэтому и ногда придется делать искл ючен и я . Выберите
стандартн ый способ разреш е н ия конфликтов, добавив, например, в конец имени цифру.
В крупных организациях в адресах электрон ной почты часто используются пол н ы е
и м е н а (например, J o h n . Q . Р u Ы i c @ m y s i t e . c om) , благодаря чему регистрацион н ые
имена скрываются от внешнего м ира. Это пре красная идея , но, чтобы облегчить работу
адми н истраторам , н еобходимо установить четкое и понятное соответствие между реги­
страционными именами и реальными именами пользователей.
В закл ючение отмети м : н еобходимо, чтобы имя пол ьзователя н а всех ком пьютерах
было оди наковы м . Это удобно как самому пользователю, так и адми н истратору.
З а ш ифрова н н ые па рол и
И сторически с истем ы ш ифровали п арол и пользователей с помощью ал горитма
D E S . По мере увеличения вычислительной мощности эти парол и стали тривиальными
для взлома. Затем системы перешли на скрытые пароли и криптографию на основе алго­
ритма M D5. Теперь, когда в алгоритме M D5 были обнаружены значител ьн ые недостатки ,
текущим стандартом стало хеширование паролей с помощью криптографической "сол и "
на основе алгоритма SHA- 5 1 2 ( с м . документ Guide to Cryptography на веб-сайте owa s p . o r g ) .
Н аши илл юстративные с истем ы поддержи вают м ножество ал горитмов ш ифрования,
но все они по умолчанию соответствуют алгоритму S HA-5 1 2 . Если в ы не обновляете си­
стемы из более старых версий, вам не нужно обновлять выбор ал горитма .
В с истеме Fre e B S D алгоритм , задан н ы й по умолчан и ю , можно модифици­
ровать с помощью файла /etc/ login . conf.
В с истемах Deblan и Ubuntu алгоритм , заданный по умолчанию, можно было
модифицировать с помощью файла /etc/ login . defs, но после появления
подключаемых модулей аутентификации РАМ , этот подход стал устаревши м .
Политики установления паролей п о умолчанию, включая выбор алгоритма
хеширования, можно найти в файле /etc/pam . d/common-passwd.
RHEL
В с истемах алгоритм ш ифрования паролей можно по-прежнему установить
в файле /etc/ login . defs с помощью команды authconfig, как показано
н иже:
$ sudo authconfig
--
pas salgo= sha 51 2
- -
update
2 Стандарт RFC 5 3 2 1 требует, чтобы локал ьная часть адреса (т.е. часть перед з наком @ ) сч италась
чувствительной к регистру. Остальная часть адреса обрабаты вается в соответстви и со стандартам и
D N S , который нечувствителе н к регистру. К сожален ию, это различие я вля ется тонк и м , и о н о н е
реал и зуется повсеместно. Помните также , что многие устаревш и е систем ы электронной почты
возни кл и до появле н ия сообщества I E�F.
Глава 8. Управление учетными записями пользователей
277
Изменение ал горитма ш ифрования паролей не приводит к обновл е н и ю существу­
ющих парол е й , поэтому пользовател и должны вручную изме н ить свои парол и , прежде
чем новый алгоритм вступит в действие. Для того чтобы аннулировать стары й пароль
и принудительно внести обновления , используйте команду
$ chage -d О имя_ поль з о в а теля
Качество пароля - еще одна важная проблема. Теоретически более длинные пароли
более безопас н ы , как и парол и , содержащие разнотипные с и м волы (например, проп ис­
ные буквы , знаки пре п и нания и цифры).
Бол ь ш и нство с истем позволя ют уста н а вл и вать ста ндарты построе н и я парол е й
дл я пользователе й , н о имейте в виду, что пользователи могут умело обойти эти требо­
вания, есл и найдут их чрезмер н ы м и или обремен ител ьн ы м и . Стандарты , используемые
наш ими иллюстративн ы м и с истемами , приведе н ы в табл . 8 . 1 .
Таблица 8 . 1 . Стандарты качества паролей
Место установки
Система Требования по умолчанию
/etc/login . defs
/etc/ securi ty/pwquali ty . conf
/etc/pam . d/ sys tem-auth
Red Hat
CentOS
Больше В символов с требованием уровня
сложности
DeЬian
Ubuntu
Больше 6 символов с требованием уровня
сложности
/etc/login . defs
/ etc/pam . d/ common-password
FreeBSD
Без ограничений
/etc/ login . conf
. .
-·
.
-
'
.
. . . ". . . . . . . .
"
· · •· · · · ·
· ·
-·
Ш Дополнительную информацию о выборе паролей см. в разделе 27. 3 .
Требован ия к качеству пароля - это вопрос дебатов, н о м ы рекомендуем в а м опреде­
лить приоритет по сложности . 3 Двенадцать символов - это м и н и м ал ьная длина для бу­
дуще го парол я ; обратите вниман и е , что это значительно больш е , ч е м длина, задан ная
по умолчанию в л юбой системе. В вашей организации могут существовать общие стан ­
дарты качества пароля. Если это так, отложите эти настройки.
Если в ы реш ил и обойти с вои систе м н ы е и нструменты для добавления пол ьзовате ­
лей и вместо этого изм е н ить файл /etc/pas swd вручную ( в ы пол н и в команду vipw с м . раздел 8 . 6 ) , чтобы создать н овую учетную запись, поместите в зашифрова н ное
поле пароля с и мвол * ( F ree B S D ) или х ( Linux) . Эта мера п редотвратит несан кцион и ­
рован ное испол ьзование учетной записи д о тех пор, пока в ы и л и пользовател ь не уста­
новите реальны й парол ь.
Шифрованные пароли имеют постоян ную длину (86 символов для S HA-5 1 2 , 34 сим­
вола для M D5 и 1 3 символов для D E S ) независимо от длины н езашифрованного паро­
ля. П ароли шифруются в сочетании со случайной "солью" , так что одному паролю могут
соответствовать разные заш ифрован ные фор м ы . Если два пользователя выбирают оди н
и тот ж е пароль, этот факт обыч но не может быть обнаружен путем проверки зашифро­
ванн ых паролей.
П арол и , заш ифрованные алгоритмом M D5 в файле тен евого парол я , всегда нач ина­
ются с с и мволов $ 1 $ или $ md 5 $ . Пароли Blowfish нач и н аются с символов $ 2 $ , пароли
SHA-256 - с $ 5 $ , а пароли S HA- 5 1 2 - с $ 6 $ .
'Допол нительную и н формаuию п о этой проблеме с м . п о адресу x k c d . с о т / c o m i c s / p a s s w o r d _
s t r e n g t h . png.
278
Часть 1 . Основы администрирования
Идентификатор пользов а теля
Ш Дополнительную информацию об учетной записи пол ьзователя r o o t см . в разделе 3. 1 .
П о определе н и ю иде нтификатор пол ьзователя r o o t равен нул ю . Бол ь ш и нство с и ­
стем также определя ют псевдопол ьзовател е й , например Ь i n и d a em o n , как владельцев
команд ил и файлов конфигурации . Эти фикти вные регистрацион н ы е имена принято
указывать в начале файла /etc/pas swd, присваивая им низкие идентифи каторы U I D
и назначая дл я н и х фиктивную оболоч ку (напри мер, /Ьin/fal se) , чтобы н и кто н е мог
войти в систему под эти м и именами.
Для того чтобы зарезервировать достаточно места для будущих фиктивных пол ьзо­
вателе й , м ы рекомендуем назначать U I D для реал ьн ы х пол ьзователе й начиная с \ ООО
или выше. (Желаем ы й диапазон для новых U I D можно указать в файлах конфигурации
с помощью параметров команды useradd.) П о умолчанию наши систе м ы ссылок Linux
присваи вают идентификаторы U I D , начи ная с 1 000. Система Free BSD прис ваивает пер­
вому реальному пользователю U I D, равн ы й 1 00 1 , а затем добавляет един ицу для каждо­
го нового пользователя .
Не испол ьзуйте U I D повторно, даже когда пользовател и покидают вашу организа­
цию и вы удаляете их уч етные записи. Эта предосторожность предотвращает пута н и ­
цу, которая может возн икнуть при дал ьн е й ш е м восстановл е н и и файлов из резервных
коп и й , в которых пол ьзователи могут быть идентифицирова н ы с помощью U I D , а не
по регистрационному имен и .
Иде нтификаторы U I D должны быть у н и кальн ы м и в мас ш табе всей орган иза ц и и .
И н аче говоря , конкретн ы й U I D должен ссылаться на одно и то ж е регистрационное и м я
и одного и того ж е человека на всех маши нах, которые разрешено исполь з овать этому
человеку. Нес пособность поддерживать уникал ьн ы е U I D может при вести к проблемам
безопасности в таких системах, как N FS, а также к путан ице , когда пользователи пере­
ходЯт из одной рабоче й груп п ы в другую.
Трудно поддерживать ун и кальные U I D, есл и групп ы м а ш и н управляются разн ы м и
л юдьми или организаци я м и . Эти пробл е м ы носят техн ический и политический харак­
тер. Л учшее решение - иметь централ ь н ы й сервер базы дан н ы х ил и каталог, которы й
содержит запись дл я каждого пользователя и обес печивает уникальность.
Более простая схе ма - назначить каждой группе внутри организации собстве н н ы й
диапазон U I D и позвол ить каждой группе управлять собстве н н ы м диапазоном. Это ре­
ш е н ие ограничивает пространство U I D , но не устраняет параллельную проблему с уни­
кал ьн ы м и регистрацио н н ы м и именам и . Независимо от ваше й схе м ы , основной задачей
я вляется согласован ность подхода. Если согласованность невозможна, у н икал ьность
U 1 D становится второй по важности цел ью.
Популярной системой управления и распростран е н и я и нформации об учетн ых за­
п ис я х , которая зарекоме ндовала себя в круп н ы х орга н изациях, я вляется п ротокол
Lightweight Directory Access Protocol ( LDAP ) . Он кратко описан в этой главе и более под­
робно рассматривается в разделе 1 7 . 2 .
Идентификатор груп п ы по умолч а н и ю
Как и идентификатор пол ьзовател я ( U I D) , иде нтифи катор груп п ы ( G I D) я вляет­
ся 32-битов ы м цел ы м ч ислом. Идентифи катор О зарезервирован для групп ы с и м е н е м
roo t , s y s t em или whee l . Как и в случае идентификаторов пол ьзователей, систе м ы ис­
пользуют несколько предоп ределенных груп п для собствен н ы х нужд. Увы , в этом вопро­
се согласованности среди коллег - п роизводителей с истем не набл юдается. Например,
Глава 8. Управление учетными записями пользователей
279
груп па Ьin и меет идентифи катор G J D , рав н ы й 1 , в с истем ах Red Hat , CentOS и G I D ,
равный 2, - в системах Ubuntu, Deblan и G J D, равный 7,
в системе Free B S D .
В т е далекие времена, когда ком пьютеры б ы л и е щ е дорогим удовол ьствием , группы
использовал ись для учета машин ного времени, чтобы время работы центрального про­
цессора, врем я , затраченное на регистрацию, и использованное дисковое п ространство
оплач ивал соответствующи й отдел . В н астоящее время группы испол ьзуются , в основ­
ном , для организации совместного доступа к файлам.
-
m Допол нительную и нформаци ю о каталогах с установленным битом s e t g i d см . в раз­
деле 5 . 5 .
Группы определя ются в файле /etc/group , а поле идентификатора групп ы в фай­
ле /etc/pas swd задает стандарт н ы й ( "фактичес к и й " ) идентификатор G I D на момент
регистрац и и пользователя в систе м е . Этот идентификатор н е и грает особой роли при
определении прав доступа; он испол ьзуется лишь при создан и и новых файлов и ката­
логов. Новые файлы обычно в кл ючаются в фактическую группу с воего владельца , но
если вы хотите разделять файл ы с другим и участни кам и проектной групп ы , не забудьте
вручную измен ить для этих файлов владел ьца группы.
При этом следует и меть в виду, что если у каталогов установлен бит s e t g i d (02000)
или файловая система с монтирована с опцией grpid, новые файлы включаются в груп­
пу родительского каталога.
П оле GECOS
Это поле иногда ис пользуется для хранен и я персональной и нформации о каждом
пол ьзователе . Оно я вл яется н аследием некоторых из ран н и х верс и й с истем ы U N IX,
испол ьзовав ш и х для разных цел е й семейство операцион н ых с истем General Elect ric
Comprehe nsive Operating Systems. Оно не и меет четко о предел е н ного с интакс и с а .
В принципе структура пол я G ECOS может быть произвольной , а ее элементы разделя­
ются запятым и и размещаются в следующем порядке:
•
полное имя (часто используется только это поле) ;
•
номер офиса и здания ;
•
рабочий телефон ;
•
домашний телефон.
lШ Дополн ительную информацию о базе данных LDAP см в разделе 1 7 . 2 .
И нформацию, содержащуюся в поле G ECOS, можно изменять с помощью команды
chfn. Эта команда используется для веден и я и обновл е н и я с п иска телефон н ых номе­
ров, но е ю часто злоупотребляют: например, пользовател ь может изменить и нформа­
цию так , что она станет н е цензурной или некорректной. В некоторых систем ах мож­
но установить ограничен и я , указав, какие поля может модифицировать команда chfn.
Адми н истраторы сетей бол ь ш инства университетских городков совсем отключают ко ­
манду chfn. Во м ногих с истемах команда chfn " по н имает" только файл pas swd, по­
этому, если для управления регистрационной информацией вы испол ьзуете базу дан н ы х
LDAP и л и какую-либо и н у ю службу каталогов, команда chfn может не работать вовсе.
Домаш ни й катало г
Войдя в систему, пользовател ь попадает в свой домашн и й каталог. И менно в домаш­
них каталогах оболоч ки регистрации и щут и нформацию, связанную с учетной зап исью,
Часть 1. Основы администрирования
280
псевдонимы оболоч ки и переменные окруже н ия , а также кл ючи S S H , сертификаты сер­
веров и другие параметры.
Следует и м еть в виду, что если домаш ние каталоги смонтирован ы вне файловой си­
сте м ы , то в случае проблем с сервером ил и с самой сетью они могут оказаться н едо­
ступ н ы м и . Если на момент регистрации этот каталог отсутствует, выводится сообщение
вроде no h ome d i r e c t o r y (домашн и й каталог отсутствует) и пользовател ьские дан ные
поме щаются в каталог / . 4 В качестве ал ьтернативы регистрацию можно отключить со­
всем с учетом систе м ной конфигурац и и. Более подробно домаш н и е каталоги описыва­
ются в разделе 8 . 6 .
Регистрационная оболоч ка
В качестве регистрацион ной оболочки, как правило, задается и нтерпретатор команд,
но в прин ципе это может быть л юбая программа. П о умолчани ю для системы Free B S D
испол ьзуется и нтерпретатор sh, а дл я с исте м ы Linux
и н терпретатор bash ( G N U ­
версия оболочки sh) .
В не которых системах пол ьзовател и могут менять и нтерпретатор с помощью коман­
ды chsh, но, подобно chfn , эта команда может не работать, есл и дл я управления ре­
гистрационной и нформацией вы испол ьзуете базу дан н ых L DAP или какую-л ибо иную
службу каталогов. Есл и вы испол ьзуете файл /etc/pas swd, систе м н ы й адм ин истратор
всегда может замен ить интерпретатор пол ьзователя , отредактировав файл passwd с по­
мощью програ м м ы vipw.
-
8.3 . ФАйлы /Eтc / sНADow
Файл с крытых паролей доступен для чтения только суперпользователю и предназна­
чен для хране н ия зашифрован н ы х парол е й подальше от л юбоп ытн ых глаз и программ
взлома. В нем также содержится учетная и н формация , которая отсутствует в исход­
ном файле /etc/passwd. В настоящее время механизм с крытых паролей ис пол ьзуется
по умолчанию практически во всех с истемах.
Файл shadow не включает в себя файл pas swd, и последний не генерируется автома­
тически при изменении файла shadow. Оба файла необходимо хран ить независимо друг
от друга ( ил и испол ьзовать команду наподобие useradd для автоматического управле­
ния файлам и ) . Как и /etc/pas swd, файл /etc/ shadow содержит одну строку для каж­
дого пользователя . Каждая строка состоит из 9 полей, разделенных двоеточиями:
•
регистрацион ное имя;
•
заш ифрованный пароль;
•
дата последнего изменен ия пароля ;
•
м и н и м ал ьное число дней м ежду измене н ия м и пароля;
•
максимальное число дней между изменения м и пароля;
•
коли чество дней до истечения срока действия пароля, когда выдается предупреж­
ден и е ;
4Это сообщен и е поя вляется п р и регистрации в системе через консоль и л и терминал , но не через
экра н н ы й диспетчер , такой как xdm, gdm или kdm. В последнем случае пользовател ь вообще
будет н емедленно вы веден и з систе м ы , поскольку п рограмма-диспетчер не сможет осуществить
запись в нуж н ы й каталог ( например, / gnome).
...
.
Глава 8. Управление учетными записями пользователей
•
281
количество дней по истечении срока действия парол я , когда учетная запись аннул ируется;
•
дата истечения срока действия учетной записи;
•
зарезервирован ное поле, в настоя щее время пустое.
Л и ш ь первые два поля обязательно должн ы быть запол н е н ы . П оля дат в файле
/etc/ shadow задаются в виде ч исла дней (а не секунд) , п рошедших с 1 января 1 970 года,
что не является стандартным способом вычисления времени в системах U N IX и Linux.5
Типичная зап ись выглядит так.
mi l l e r t : $ 6 $ i TE FbMTM$ CXmx PwErbEe f 9 RUBv f l z v 8 EgXQd a Z g 2 e Od5 uXyvt 4 s F z i 6G 4 1
I qavL i l TQgniAHm3 C z w / L o aG z o F z aМm . Yw01 / : 1 6 9 7 1 : 0 : 1 8 0 : 1 4 : : :
Приведем более подробное описание некоторых полей.
•
•
•
•
•
•
•
•
•
Регистрационное имя совпадает с именем из файла /etc/passwd. Оно связывает
записи файлов pas swd и shadow.
Зашифрован н ы й пароль идентичен тому, который ранее хранился в файле /etc/
pas swd.
Третье поле содержит дату последне го измен е н и я пользователем с воего пароля.
Это поле обычно заполняется командой passwd.
В четвертом поле задано кол и чество дне й , спустя которые пользователь сможет
снова изменить пароль. Это не позволяет пользователя м немедленно возвращать­
ся к привычн ы м паролям после их обязательного изменения. Такая возможность
кажется нам опасной, если в течение указанного времени будет обнаружено на­
руш е н ие безопасности с исте м ы . Поэтому мы рекомендуем устанавливать дан ное
поле равным нулю.
В пятом поле задано максимальное ч исло дней между двумя изменениями паро­
ля. С помощью этой установки адм и нистраторы заставл яют пользователе й менять
свои парол и (подробнее механизм устареван ия парол е й описан в разделе 27.4).
В системе Linux макси мальное время жизни пароля определя ется суммой значе­
ний дан ного и седьмого (льготны й период) полей.
В шестом поле задано количество дней , оставшихся до момента устаревания паро­
ля , когда программа login должна предупреждать пользователя о н еобходимости
сменить пароль.
В восьмом пол е задан ден ь, в которы й истекает срок действия учетной записи
(считая от 1 я н варя 1 970 года) . По прошеств и и этой даты пользовател ь не смо­
жет зарегистрироваться в системе, пока адм и н истратор не сбросит значение поля.
Если поле оставлено пустым , учетная зап ись всегда будет активной.6
Чтобы установить поле даты истече н и я срока, можно исп ол ьзовать команду
usermod (даты здесь должны быть в формате гггг-мм-дд).
Девятое поле зарезервировано на будущее. 7
Теперь, когда назначение полей понятно, вернемся к расс мотренному выше примеру.
mi l l e r t : $ 6 $ i T E FbMTM$ CXmx PwErbEe f 9 RUBv f l z v 8 EgXQda Z g 2 e Od5 uXyvt 4 s F z i 6G 4 1
I qavL i l T QgniAHm3 C zw / L o a G z o F z aМm . Yw01 / : 1 7 3 3 6 : 0 : 1 8 0 : 1 4 : : :
5 При этом вы можете преобразовать секунды в дни с помощью команды expr ' date+'iss ' / 8 6 4 0 0 .
6 Седьмое поле в к н иге не оп исано. - Примеч. ред.
7 Возможно, это поле н икогда не будет использовано.
Часть 1 . Основы администрирования
282
В этой записи говорится о том , что пол ьзователь mi l l e r t последни й раз м енял свой
парол ь 19 и юн я 20 1 7 года . Следую щ и й раз парол ь должен быть изменен через 1 80 дне й .
З а две н едели до этого пол ьзовател ь нач н ет получать предупреждения о необходимости
с м е н ить парол ь. Учетная зап ись не и меет срока действия.
С помощью утил иты p w c o nv можно согласовать содерж и м ое файлов s h adow
и passwd, выя вл я я и удал я я п ол ьзо вателей не указанных в файле pas swd.
,
8.4. ФАйлы /Етс /МАS ТЕR . PAS SWD и /Етс/
LOGIN . CONF в СИСТЕМЕ FREEBSD
П оявление модулей РАМ и наличие аналогичных команд управления пол ь­
зователя м и в систе мах F ree B S D и Linux сделал и управление учетн ы м и за­
п исями относител ьно согласованным между платформам и , по крайней мере
на самом верхне м уро1ше. Однако между ними существуют некоторые раз­
личия на уровне реал и зации.
Ф айл /etc/mas ter . pas swd
В систе м е Free B S D " реал ьн ы м " файлом паролей я вляется /etc/ma s ter . pas swd,
которы й доступе н тол ько для чте н ия . Файл /etc/pas swd предназначен для обратной
совместимости и не содержит паролей (вместо этого он содержит с и м вол ы * в качестве
заполни тел е й ) .
Чтобы измен ить файл паролей, выполн ите команду vipw. Эта команда вызы вает ваш
редактор для копии /etc/шaster . pas swd, затем и нсталл ирует новую версию и повтор­
но генерирует файл /e tc/pas swd, чтобы отразить все изм е н е н и я . ( Команда vipw яв­
ляется стандартной для всех систе м U N IX и Linux, но особенно важно испол ьзовать ее
в системе Free B S D , потому что файлы с двойн ы м паролем должны оставаться синхро­
н из ированн ы м и (см . раздел 8 . 6 ) . )
Кром е полей файла pas swd файл mas ter . pas swd содержит т р и допол н ител ьных
поля . К сожал е н и ю , по умолчан и ю о н и зажаты между пол е м G I D и пол е м G EC OS ,
зада н н ы м и по умолчан и ю , поэто м у фор м ат ы ф а й л о в н а п р я м у ю н е совмест и м ы .
Допол н ител ьн ые три поля п е р е ч и слен ы н иже :
•
класс регистраци и ;
•
в р е м я изме н е н и я п а рол я ;
•
врем я ис те ч е н и я срока де йствия пароля.
Класс регистрации (есл и он указан) относится к записи в файле /etc/ login . conf.
Этот класс оп редел я ет огра н ич е н и я потребления ресурсов и управляет множеством дру­
гих параметров (см . следующий раздел) .
П ол е времени измене н и я пароля отражает возраст пароля. Он содержит время в секун ­
дах с момента U N IX, после которого пользователь будет вынужден изменить свой пароль.
Вы можете оставить это поле п уст ы м указав, что парол ь будет действовать веч но.
Врем я истечения срока действия учетной записи означает время и дату ( в секундах,
как и для моме нта исте ч е н ия срока действия парол я ) , по прошестви и которого истекает
срок действия учетной зап иси пол ьзователя. Пользователь не может войти в систе м у по­
сле этой даты , есл и поле не будет сброшено адм и н истратором. Если это поле оставлено
пустым, учетная запись останется действител ьной.
,
Глава 8. Управление учетными записями пользователей
283
Файл / etc/ loqin . conf
Файл / e tc / l o q i n . conf в с и сте м е Free BS D задает параметры учетной запи с и
для пол ьзователе й и групп пол ьзователе й . Его формат состоит из п а р ключ-значение
с двоеточием и булевых флагов.
Когда пользователь входит в систему, поле входа в каталог /etc/master . passwd опре­
деляет, какую запись из файла / etc/ loqin . conf применять. Если в записи пользователя
master . passwd не указан класс входа в систему, используется класс по умолчанию.
Элемент loqin . conf может установить любое из следующих значений.
•
•
Ограничения ресурсов ( м акси м ал ьн ы й разм ер процесса, макс и м ал ь н ы й размер
файла, количество открытых файлов и т.д. ) .
Сеансовые огран ичения (с какого моме нта и нас кол ько дол го разреш е н ы регистрационные имена).
•
Переменные окружения по умолчан ию.
•
Пути ПО умолчани ю ( РАТН , МАN РАТН и т.д . ) .
•
Расположение файла с сообщениями для всех пользователей.
•
Хост и контрол ь доступа на основе подсистем ы ТТУ.
•
Стандартная маска для команды umask.
•
Контроль учетных записей ( в основном заменяется модулем РАМ pam_pa s s wdqc ) .
Следующий пример демонстрирует переопределение нескольких значен и й по умолчан ию. О н предназначен для назначения с истемных администраторов .
s y s adrni n : \
: ignorenologin : \
: requi r ehome @ : \
: ma x p r oc=unl imi t e d : \
: op e n f i l e s=unl imi t e d : \
: t c=de f a ul t :
Пользователи , имеющие класс регистрации s y s a dm i n , могут войти в с истему, даже
если их имя указано в файле /var/run/noloqin и у н их может не быть рабочего домаш­
него каталога (этот параметр позволяет регистрацию , когда с истем а N FS не работает) .
Пользователи класса s y s a dmin могут запускать л юбое количество процессов и открывать
любое количество файлов.� Последняя строка записывает и нформацию в запись d e f a u l t .
Хотя с истема Free B S D и меет разумные стандартн ы е значе н и я , м ожет возни кнуть
необходимость обновить файл / etc/ loqin . conf, чтобы установить предупрежде ния
об истечени и врем е н и ожидания или об истечении срока действия пароля . Например,
чтобы установить время ожидания равн ы м 15 мин. и вьщавать предупреждения за сем ь
дней до истечения срока действия паролей, необходимо добавить следующие эле менты
в запись d e f a u l t :
warnp a s sword= 7 d : \
: i d l e t ime= l 5m : \
Есл и вы изменяете файл / etc/ l oqin . conf , вы также должн ы в ыпол н ить следую­
щую команду дл я ком пиляции ваших изменений в хешированную верс и ю файла, кото­
рую система фактически ис пол ьзует в повседневной работе:
$ cap_lllkdЬ /etc/loqin . conf
8 n о- прежнему существуют технические огран ичения на общее кол ичество процессов и открытых
файлов. которые может подцержи вать ядро, но искусственно установленных ограничени й нет.
Часть 1. Основы администрирования
284
8.5. ФАйЛ /Eтc /GROUP
Файл /etc/group содержит имена U N IХ-групп и с писки членов каждой групп ы .
Вот как выглядит фрагмент файла group и з с истемы Free B S D.
whe e l : * : O : ro o t
s y s : * : З : r oot , Ьi n
ope r a t o r : * : 5 : r o o t
Ь in : * : 7 : r oot
f tp : * : 1 4 : dan
s t a f f : * : 2 0 : da n , b e n , t r e n t
nobody : * : 6 5 5 3 4 : l p d
Каждая строка представляет одну группу и содержит следующие четыре пол я :
•
имя групп ы ;
•
заш ифрова н н ы й пароль или заполн итель;
•
идентификатор групп ы ;
•
список членов, разделенный запятыми (пробелов быть не должно) .
Как и в файле /etc/pas swd, поля разделяются двоеточиям и . Дл ина и м е н и групп ы
не должна превышать 8 с и м волов и з соображен и й совместимости , хотя во многих с исте­
мах такого ограничения нет.
Несмотря на возможность установить пароль групп ы , позволяющий л юбому пользо­
вателю присоединиться к группе, выпол н и в команду newgrp , она используется редко.
П ароль можно установить с помощью команды gpas swd; а его заш ифрован ная форма
в системе Linux сохраняется в файле /etc/gshadow.
Имена груп п и их идентифи каторы должн ы быть одинаковыми на всех ком пьютерах,
получающих совместн ый доступ к файлам через сетевую файловую систему. Этого труд­
но достичь в гетероген ной среде , поскол ьку в разных операционных системах испол ьзу­
ются разн ые идентификаторы дпя одних и тех же груп п .
Есл и в файле / e tc/pas swd пол ьзовател ь объя влен членом оп редел е н ной групп ы
по умолчан ию, а в файле /etc/group - нет, пол ьзователь все равно включается в груп­
пу. На этапе регистрации членство в группе проверяется по обоим файлам, но луч ш е все
же согласовывать их содержимое.
В н е которых старых системах огран ичивается кол ичество групп , к которым может
принадпежать пользователь. В современ н ых ядрах систе м Linux и Fre e B S D ограниче н и й
нет вообще.
Для того чтобы избежать конфли ктов , связанных с иде нтифи катора м и стандартн ых
групп , рекомендуем выбирать иде нтификаторы локал ьн ых гру п п , начи ная со знач е ­
н ия 1 000.
Согласно тради ц и и U N IX новые пол ьзователи добавля ются в группу, название ко­
торой отражает их категори ю , например " students" или " fi nance " . Однако следует учи ­
тывать, что подобная традиция повышает вероятность доступа пол ьзователе й к файлам
друг друга из-за неаккуратной установки прав.
Чтобы этого избежать, рекомендуем создавать дпя каждого пользователя ун икал ьную
группу с помощью утилит useradd и adduser (т.е. группу, имя которой совпадает с именем
пользователя и содержит только дан ного пол ьзователя ) . Это соглашение намного проще
выполнить, чем обеспечить согласование между идентификаторами пользователя и группы.
Чтобы пользователи могл и обмениваться файлами с помощью группового механизма,
со:щайте отдельные группы. Идея персональных групп состоит в том , чтобы не препятство-
Глава 8. Управление учетными записями пользователей
285
вать испол ьзован ию групп как таковых, а просто создать более ограничительную группу
по умолчанию для каждого пользователя , чтобы файлы не бьmи предоставлены для совмест­
ного пользователя непреднамеренно. Можно также ограничить доступ к вновь созданным
файлам и каталогам, установив маску umask по умолчан и ю вашего пользователя в файле
запуска по умолчанию, например /etc/profile или /etc/bashrc (см. раздел 8.6).
m Дополнительную и нформацию о п рограмме sudo см . в разделе 3.2.
Членство в группах также может служить маркером для других контекстов или при­
вилегий . Например, вместо того , чтобы вводить имя пользователя каждого систе м ного
администратора в файл sudoers , вы можете н астроить программу sudo так, чтобы все
члены групп ы " admiп" автоматически и мели привилегии sudo .
В с истеме Liпux для создания , изменения и удаления груп п предусмотрены
команды groupadd, groupmod и groupdel .
Система Free B S D для выпол н е н ия всех этих фун кций испол ьзует команду
pw. Чтобы добавить пользователя d a n в группу s t a f f , а затем проверить,
что измене н ие было правил ьно реализовано, необходимо выпол нить следу­
ющие команды:
$ sudo pw groupmod s taff -m dan
$ pw groupshow s taff
s t a f f : * : 2 0 : da n , evi , g a r t h , t r e n t , b en
8.6. ПОДКЛЮЧЕНИЕ ПОЛЬЗОВАТЕЛЕЙ
ВРУЧНУЮ: ОСНОВНЫЕ ДЕЙСТВИЯ
Прежде чем создавать учетную запись для нового пользователя в крупной коммерче­
ской компании , правительствен ном учрежде н и и или учебном заведен и и , важно заста­
вить его подписать соглашен ие о правилах работы в с исте м е . ( Как? ! У вас нет такого
соглашения? Немедле н но прочтите материал в разделе 3 1 .9 , чтобы узнать, для чего оно
нужно и как е го составлять . )
У пользователей н е т веских прич и н подписывать такое соглашение, поэтому в и нте­
ресах адм и нистратора убедить их сделать это, чтобы и меть рычаги влияния. П осле того
как учетная зап ись создана, добиться подписи будет трудно, так что лучше получ ить ее
заранее. Если существует такая возможность, прежде чем создавать учетную запись, по­
лучите подпись пользователя на бумажном докуме нте.
Процесс подкл ючения нового пол ьзователя состоит из ряда этапов, определяемых
систе м н ы м и требова н и я м и ; два с вязан ы с фор мирова н и е м пол ьзовательской сред ы ,
а еще нескол ько этапов может понадобиться для целей с истемного администрирования.
•
Обязательные этапы :
•
•
•
•
•
отредактировать файлы pas s wd и shadow (или файл mas ter . pas swd в с исте­
ме FreeB S D ) , чтобы создать учетную запись пользователя ;
добавить зап ись нового пользователя в файл /etc/group (в действительности
это не необходимо, а желательно) ;
задать первоначал ьн ы й пароль;
создать для нового пол ьзователя домаш н и й каталог, н азначив его владельца
с помощью команды chown и задав режим доступа с помощью команды chmod;
настроить роли и права доступа (есл и вы используете RBAC ; с м . чуть н иже ) .
часть 1. Основы администриравания
286
•
П ользовательские этапы:
•
•
скопировать в домаш н и й каталог пользователя стандартные конфигурацион ­
ные сценарии .
Административные эта пы :
•
•
•
получить подпись пол ьзователя на соглашен и и о правилах работы ;
проверить правил ьность создания учетной записи ;
добавить контактную информацию о пользователе , а также сведения о статусе
учетной записи в административную базу данн ых.
Для выпол н е н и я этого с п иска действий необходимо иметь сценарий ил и утил иту,
и во всех наших иллюстративных с истемах они предусмотрен ы в виде команд adduser
и useradd.
Реда кти рован ие фа йлов pas swd и qroup
Ручное редактирова н ие файлов pas swd и group уязвимо для ош ибок и неэффек­
тивно, поэтому м ы рекомендуе м и н струменты высокого уровня , такие как useradd,
adduser, usermod, pw и chsh.
Есл и вам пр идется добавлять пол ьзователя вруч ную, испол ьзуйте команду vipw,
чтобы отредактировать файл ы pas swd и shadow ( в системе Free B S D
файл mas ter .
passwd). По умолчанию выбирается редактор vi , но эту установку можно изменить, за­
дав новое значение переменной среды E D I TOR.9 Более важно то, что команда vipw бло­
кирует редактируе м ы й файл , позволяя только одному пользовател ю редактировать его.
Это не допускает н и каких конфл иктов между действия м и разн ых пользователе й .
-
В с истемах Linux после редактирования файла pas swd команда vipw авто­
матически напомн ит пользователю о необходимости отредактировать файл
shadow. Для этого используется команда vipw -s .
В систе м е FreeBS О команда vipw редактирует файл mas ter . pas swd, а не
/etc/pas swd. П осле внесения измене н и й команда vipw запускает в ыпол­
н е н ие команды pwd mkdЬ для ге нерирования производного файла pas swd
_
и двух хеш и рова н н ы х верс и й mas ter . pas swd (одна из них содержит за­
ш ифрова н н ы е парол и , доступные для чте н и я тол ько пользователю r o o t ,
а вторая не содержит паролей и доступна дл я чтения л юбому пользователю).
Например, выпол н е н и е команды vipw и добавл е н и е следующей строки приведет
к определен и ю учетной записи с именем whi t n e y .
wh i t n e y : * : l O O З : l O O З : : O : O : Wh i t n e y S a t h e r , АМА Т Н 3 - 2 7 , х 7 9 1 9 , :
/ h ome / s t a f f / wh i tn e y : /b i n / s h
Обратите внимание н а звездочку в поле зашифрованного пароля. О н а предотвращает
использование учетной записи, пока не будет установлен настоя щий пароль с помощью
команды passwd (см. следующий раздел) .
Затем отредактируйте / e t c / g roup , выпол н и в команду v i g r . Добавьте строку
для новой персонал ьной груп п ы , есл и ваша орган изация использует их, и добавьте имя
пользователя для каждой груп п ы , в которой пользователь должен иметь членство.
'' Если сначала выполн ить команду vipw ( или vigr ) , систем ы Ubuntu и Deblan п редложат вам
выбрать одну из команд vim . basic, vim . tiny, nano или ed. Если впоследствии вы передумаете,
выполните команду select-editor.
Глава 8. Управление учетными записями пользователей
287
Как и в случае с командой vipw, использование команды vigr гарантирует, что из­
менения, внесе н н ы е в файл /etc/group, я вляются коррект н ы м и и атомар н ы м и . После
сеанса редактирования команда vigr должна попросить вас выпол н ить ко манду vigr - s
дл я редактирования файла теневой групп ы (gshadow) . Если вы не хотите устанавливать
пароль для групп ы , что необычно, вы можете пропустить этот шаг.
Чтобы внести изм е н е н ия в файл /etc/group, в с истеме Free B S D ис пользу­
ется команда pw groupmod.
Задан ие па роля
W Правила выбора удачных паролей при ведены в разделе 27.З.
Установите пароль для нового пользователя с помощью следующей кома нды.
$ sudo passwd но в о е - имя - поль з о в а теля
В некоторых автоматизированн ых систе мах п р и добавл е н и и н о в ы х пол ьзователе й
необязательно вводить н ачал ь н ы й пароль. Задание пароля в таких случаях происходит
при первой регистраци и . Несмотря на удобство, этот вариант приводит к образовани ю
огромной дыры в системе безопасности ; тот, кто может угадать новые регистрацио н н ы е
и м е н а ( ил и узн ать и х в файле /etc/passwd) , может в ы пол н ить " пи ратс к и е " действия
по отнош е н и ю к учетным записям , прежде чем соответствующие пол ьзователи получат
возможность заре гистрироваться .
Помимо других функций команда pw в системе Free B S D ге нерирует и уста­
навл ивает случай н ы е парол и пол ьзователей.
$ sudo p w usermod raphael -w random
P a s sword f o r ' r a p h ae l ' i s : l n З t c Yu l s
М ы н е являемся горяч и м и сторонн иками испол ьзования случайн ых паролей. Однако
они бывают полезн ы м и в качестве временных паролей, которые подлежат замене после
использования.
Созда ние домаш него каталога пользовател я
и инсталляция конфигура ционных фа йл о в
Новые домаш н ие каталоги пол ьзователей создаются с помощью команд u s e radd
и adduser, но вы вряд ли захотите выпол н ять двойную п роверку прав доступа и файлов
запуска для новых учетных записей.
Домаш н и й каталог создать легко. Если вы забыли это сделать п р и создани и учетной
записи нового пол ьзователя , исправить положен и е можно с помощью простой команды
mkdir. Вам также понадобится установить права владен ия н а новый каталог и права до­
ступа к нему, но луч ше все го сделать это после инсталляции локальных конфигурацион ­
ных файлов.
Имена таких файлов традиционно начинаются с точ ки и зака н ч иваются суфф и ксом
rc (сокраще н и е от "run command "
команда запуска) - "от голосок" операционн о й
систем ы CTS S. Предшествующая точка заставляет команду l в не в ключать э т и файлы
в листинги каталогов, есл и только не указана опция - а . М ы рекомендуем предоставлять
стандартные файлы запуска для всех и нтерпретаторов команд, которые популярны в ва­
ших с истем ах , чтобы пол ьзовател и по умол ч а н и ю п родол жал и работать в корректной
среде даже при смене командной оболочки. Наиболее часто встречающиеся конфигура­
цион н ы е файлы перечислен ы в табл . 8 . 2 .
-
Часть 1. Основы администрирования
288
Таблица 8 . 2 . Распространенные конфигурационные файлы
Команда
И мя фама
Все
оболочки
•
loqin_сом
Настройки параметров регистрации пользователя по умолчанию ( FreeBSD)
sh
. profile
Установка пути поиска, типа терминала и среды
Ьаsь•
. bashrc
Установка типа терминала (если это необходимо)
. bash_profile
Установка опций программ Ьiff и me sq
Установка переменных окружения
Установка псевдонимов команд
Установка пути поиска
Установка атрибута umask для управления правами дос�упа
Установка переменной C D PATH для поиска имен файлов
Установка переменных Р s 1 (строка приглашения ) и HI s TCONT ROL
. loqin
Считывается всеми зарегистрированными экземплярами интерпретатора
csh
csh/ tcsh
. cshrc
.... . . .
.. . .
. . . . ....... . . . . " . . .. . " .... -
Применение
Считывается всеми экземплярами интерпретатора csh
. .. " . .. . .. .. . . . .. . . . ...
. . . . . . " " .. . " ..
..
" .. . "
. .
. . . .. . .
.
.
.
. . . ..
.
.
.
vi/vim
. ею:с/ . vimrc
ешасs
•
qit
. qitcomiq
Установка параметров пользователя, редактора, цвета и псевдонимов в си­
стеме Git
. qcom
Среда GNOME: конфигурация среды пользователя посредством команды
qconf
. qconfpa th
Путь для дополнительного варианта конфигурации среды пользователя по­
средством команды qconf
. . " . . .. .
........... " .... -.....
.... " . . . . . . . . . . . .. . .
КDЕ
ешасs
Устано вка опций редакторов vi/viш
. ............ " . . . . " . . . . " ......•.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . • . . . . - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . " . . . . . . . . . . .
Установка опций редактора ешасs и функциональная привязка его клавиш
. . . . . . . . . . . . . . . " . . . " . . . . " . " . . . . " . " . . . . " . . . . . .. " . . . . " . . . . . " . . . . . . " " . " . . " . . . . . " . . . . . . " . . . " " . . . . . . " . . . . . " . . . . . . . . . . . . . . . . " " . . . " . " . " " . . . . . . " . . . . . " " . . " . . . " . . . . . . . " . . . . . . " " . . . . " " " . . . . " . . . . . . . " . " . . " . . . . . . . . " . . . . . . . . . . . • . . . . " . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . .
. . . .. . . . . . . . . . . . . . . . . . . . . .. " . . . " . . . " " " . . " . " . . . ... . . . . . . . " " . .... . "." . . .. . " ... . .. " " . . . . . . . . . . .. " . " . " . . . . . . . . . . " " . . " " . . " . . . " . " . " " . " ..
•
kde /
.. . . . " . . . " " .
"
Среда KDE: каталог файлов конфигурации
" Оболочка bash также читает файлы . profile или / e tc /prof i l e в режиме эмуляции s h . Файл . ba s h_
profile считывается командами регистрации, а файл . bashrc считывается с помощью интерактивных оболочек
без регистрации.
Образцы файлов запус ка традиционно хранятся в каталоге /etc / ske l . Если вы бу­
дете редактировать примеры конфигурацион н ы х файлов, каталог / u s r / l o ca l / e tc /
skel
самое удач ное место для хранения модифицированных копи й .
Конфигурационн ые файлы и каталоги , перечисленные для настол ьн ых сред G N OM E
и K D E , представляют собой л и ш ь вершину айсберга. В частности. обратите в н и мание
на уrилиту gconf, предназначен ную для хранения предпочтений в выборе приложе ний
для программ под управлением G N O M E ( подобно тому, как это реализовано в систем­
ном реестре Wi ndows).
-
W Дополнительную и нформацию об атрибуте uшask см. в разделе 5.5.
Н е забудьте задать разум ное значение umask (рекомендуем 077, 027 ил и 022, в зави­
си мости от "дружел юбности" среды и размеров организаци и ) . Если вы не испол ьзуете
индивидуальные группы, рекоме ндуем установить дл я umask значение 077, поскол ьку
оно предоставляет владельцу пол н ы й доступ, а для групп ы и вообще для всех остал ь­
ных - н и какого доступа.
В зависимости от и нтерпретатора , в каталоге / e tc могут содержаться систе м н ы е
конфи гурацион н ы е файл ы , обрабаты вае м ы е р а н ь ш е пол ьзовател ьс ких. Н а п р и м е р ,
и нтерпретаторы b a s h и s h читают файл / etc/pro f i l e д о начала обработки файла
Глава 8. Управление учетными записями пользователей
289
/ . profile и / . bash_p rofile. В эти файлы стоит помещать стандартные установки ,
необходимые дл я функционирования вашего хоста, но следует иметь в виду, что пользо­
ватели могут переопределять свои установки в собственных конфигурацион н ы х файлах.
И нформацию о других и нтерпретаторах можно найти в документац и и (см . соответству­
ющие mаn-страницы).
�
�
По соглашению, систе м а Linux сохраняет фрагме нты загрузочн ы х файлов
в каталоге / etc /pro f i l e . d. Хотя имя каталога происходит из соглаше­
ний, принятых для оболочки sh, файл /etc/profi le . d может фактически
в ключать фрагменты для нескол ьких разных оболоче к . Кон кретн ые цел е ­
вые оболочки различаются суффикса м и имен файлов ( * . sh, * . c s h и т.д . ) .
В оболочке не встроена поддержка файла pro f i le . d; фрагменты просто
исполняются сценарием запуска по умолчан и ю в каталоге /etc ( например,
/etc/profile в случае оболочки sh или bash) .
Разделе н ие файлов запуска, зада н н ых по умолчанию, н а фрагме нты обл е гчает мо­
дульность и позволяет программ н ы м пакетам включать собствен н ы е значения по умол ­
чанию на уровне оболочки . Например, фрагменты colorl s . * указывают, как правиль­
но раскрасить вы вод команды ls, чтобы сделать его нечитаем ы м на темном фоне .
Уста новка прав доступа и владения
После установки домашнего каталога переходите к пользователю и убедитесь, что о н
и меет соответствующие права доступа. Команда
$ sudo chown
-
R новый_ поль зова тель : но в а я_ гр уппа -новый_ поль з о в а т ель
должна надлежащим образом установить права владе н и я . Обратите в нимание на невоз­
можность использования команды
$ sudo chown -R новый_ пользова тель : н о в а я_ группа -новый_поль з о в а т ель / . *
примен ител ьно к файлам , и м е н а которых нач и наются с точк и , поскол ьку н о вый_
поль з ов а тель станет владельцем не только собствен н ы х файлов, но и родительского
каталога " . . " ( например, / home ) . Это распростран е нная и опасная о шибка.
Конфигурирова ние ролей и административных п ривилегий
Управление доступом на основе ролей (role-based access control - RBAC) позвол я ­
е т "подогнать" систе м н ые права к отдел ьным пол ьзователя м и обеспечивается н а м но­
гих наших примерах с исте м . П олитика R BAC не я вляется тради цион ной частью моде­
л и управления доступом U N IX или Linux, но если на вашем хосте она испол ьзуется , то
конфигурация ролей должна быть ч астью процесса добавления пользовател е й . М одель
RBAC подробно описана в разделе 3 .4.
W Подробнее о законах SOX и G LBA написано в главе 3 1 .
Принятые в С ША закон Сарбей нса-Оксли (Sarbanes-Oxley Act), закон о преемствен­
ности страхования и отчетности в области здравоохранения ( H ealth I nsurance Portabllity
and Accountabllity Act - Н I РАА) и закон Грэм ма-Лича- Блайли ( G ramm - Leach- 8\i\ey
Act} , предназначенные, в частности, для защиты информации заказчика, полученной или
используемой финансовым и организациям и С ША, от кражи, неавторизованного доступа
либо злоупотребления , усложнили многие аспекты системного администрирования в кор­
поративной сфере , включая управление пользователями. Поэтому использование ролей
Часть 1. Основы администрирования
2 90
может быть вашим единственным жизнеспособным вариантом, позволяющим выполнить
некоторые требования , устанавливаемые законами SOX, Н I РАА и G L BA.
З а кл юч ительные действия
Дл я того чтобы удостовериться , что новая учетная запись сконфигурирована надл е ­
жа щим образом , завершите сеанс работы (т. е . вы йдите из систе м ы } , а зате м снова во­
йдите в систему под именем нового пользователя и выполните следующие команды .
$ pwd
$ ls -la
# Для п р о в ерки до м а ш не г о к а т а л о г а
# Для п р о в е р ки в л аде л ь ц а / г ру пп ы фа й л ов ко н фи г ура ц ии
Вам необход и мо уведо м ить новых пользователе й об их ре гистрацион н ы х и менах
и начал ьн ы х паролях. М ногие хосты отправл я ют эту информа ц и ю по эле ктронно й
почте , но из соображе н и й безопас ности это не приветствуется . Делайте это при лич­
ном контакте ил и по тел ефону. Н о есл и вам приходится добавлять сразу 500 новичков
на ун иверс итетские ком п ьютеры CS- 1 , переложите эту задачу на преподавателей! Есл и
вам п риходится распростран ять п арол и через электрон н ую почту, п роследите за тем ,
чтобы срок и х действия истекал через несколько дне й , если они н е испол ьзуются и не
были изменены.
W П одробнее о закл ючении п исьменных контрактов с пользовател я м и м ожно прочитать
в разделе 31 . 9 .
Есл и в вашей орган изации требуется, чтобы пользователи подписывали соответству­
ющее соглаше н и е , убедитесь в реал изации этого действия до создания их учетн ых запи ­
сей. Такая проверка предотвратит возможн ые упущения и усилит правовую основу санк­
ц и й , которые, возможно, вам придется позже примен ить. Кроме того, это подходя щий
момент для того, ч тобы ознако м ить пол ьзователе й с дополн ител ьной докуме нтацией
о локальных настойках.
Н апом н ите новым пол ьзователя м о необходимости немедлен ного изменения их па­
ролей. При желан и и это можно обеспечить путем установки действия паролей в течение
не которого короткого вре м е н и . Еще один вариант состоит в созда н и и с ценария , кото­
р ы й бы проверял новых пользователе й и удостоверялся в том , что их заш ифрованные
парол и был и измен ены 10•
Есл и вы знаете пол ьзователей лично, то в такой среде относител ьно несложно про­
следить, кто испол ьзует с исте му и с какой цел ью. Но есл и в подч и н е н и и адм и н истра­
тора бол ьшой и часто меняющийся штат пользовател е й , необходим более формал ьн ы й
способ контроля учетн ых записе й . Веде н и е базы дан ных с контактной и нформацией
и с веде н и я м и о статусе учетных зап исей поможет в случае необходимости , легко выяс­
нить, кто есть кто и зачем тому или и ному пользовател ю понадобилась учетная зап ись.
8.7. Д ОБАВЛЕНИЕ ПОЛЬЗОВАТЕЛЕЙ С ПОМОЩЬЮ
СЦЕНАРИЕВ: USERADD, ADDUSER И NEWUSERS
Во всех иллюстративных системах сценарии useradd и adduser реализуют одну и ту
же базовую процедуру, описанную выше. Но ее можно сконфигурировать под конкретную
среду. К сожалению, в каждой системе существуют свои представления о том, что именно
"' П оскол ь ку оди н и тот же п арол ь может и меть множество заш ифрованных предста м е н и й , эт от
м е т од п роверяет тол ь ко сам
факт изменения пол ьзователем свое го пароля , а не то , что пароль
ре ал ьно был за м енен други м паролем.
глава 8. Управление учетными записями пользователей
291
следует настраивать, где следует реализовать настрой ки и каково должно быть стандарт­
ное поведение, поэтому мы описываем эти подробности в соответствующих разделах.
В табл . 8 . 3 п р иведен ы команды и файл ы кон ф и гураци и , и м е ю щ и е отн о ше н и е
к управлению пользователя м и .
Таблица 8 . 3 . Команды и файлы конфиrурации дл я управления пользователями
Система
Команды
Конфигурационные файлы
Все версии Linux
/etc/login . defs
/etc/default/useradd
DeЬian/Ubuntu•
useradd ,
usermod ,
userdel
adduser , deluser
FreeBSD
adduser , rmuser
/etc/adduser . conf
/etc/deluser . conf
/etc/login . defs
• в этот набор входят не только стандартные функции Unux, но и некоторые дополнительные функции.
Команда useradd в системе Linux
В системе Linux предус мотрен сценарий useradd , извлекающий параметры
конфигурации из файлов /etc/login . defs и /etc/default/useradd.
Файл login . defs предн азначен для реше ния таких пробл е м , как старение парол я ,
выбор алгоритмов ш ифрования, расположен ие файлов почтовых каталогов и предпо­
чтительные диапазо н ы U I D и G I D. Редактирование файла login . def s выполняется
вручную. П олезн ы м средством для понимания параметров я вляются комментарии.
Параметр ы , хранящиеся в файле /etc/default/useradd, задают расположение до­
маш них каталогов и оболоч ку по ум олчанию для новых пользователе й . Эти значения
устанавли ваются по умол ч а н и ю с помощью команды u s e radd. Например, команда
useradd -D выводит на э кран текущие значен и я , а параметр -D в сочетан и и с другим и
флагами задает значения определенн ы х опций . Например, команда
$ sudo useradd -D -s /bin/bash
устанавливает bash как оболочку по умолчанию.
Тип ич н ы м и опция м и по умолчан и ю я вля ются размещение новых п ол ьзователе й
в отдельных группах, использование алгоритма ш ифрования S HA-5 1 2 для паролей и за­
полнение домаш н их каталогов новых пользователе й загрузочн ы м и файлами из каталога
/etc/ ske l .
Основная форма команды useradd принимает имя новой учетной зап иси в команд­
ной строке:
$ sudo useradd hilЬert
Эта команда создает в файле / e t c / p a s swd запись, подобную показа н н о й н иже ,
а также соответствующую запись в файле shadow:
h i l b e r t : x : 1 0 0 5 : 2 0 : : /home / h i l be rt : / b i n / s h
По умолчанию команда useradd блокирует новую учетную запись. Дл я фактическо­
го использования учетной записи необходимо назнач ить реальный пароль.
Более реалистичный пример показан н иже. Мы указываем , что первичная группа поль­
зователя h i l be r t должна иметь имя "hilbert" и что он также должен быть добавлен в группу
"faculty". М ы переопределяем местоположение и оболочку основного каталога по умолча­
нию и попросим команду useradd создать домашний каталог, если он еще не существует:
$ sudo useradd -с "David HilЬert" -d/home/math/hilbert -g hilЬert
- G faculty -m - s /bin/ tcsh hilbert
Часть 1. основы администрирования
292
Эта команда создает следующую запись в файле pas swd:
h i l b e r t : x : l O O S : З O : Da v i d H i lb e r t : / h ome /ma t h / h i l b e r t : / b i n / t c s h
Назначен н ы й иде нтифи катор U I D превышает наивыс ш и й U I D , существующий
в системе, а соответствующая запись в файле shadow имеет вид:
hilbert : : 1 4 3 2 2 : 0 : 9 9 9 9 9 : 7 : 0 : :
Сим вол (символ ы) заполнения парол я в файлах passwd и shadow различаются в за­
висимости от операционной систем ы . Команда useradd также добамяет пол ьзователя
h i l b e r t в соответствующие группы в файле /etc/group, создает каталог /home/math/
hilbert с надлежащими владел ьцами и запол няет его файлами из каталога /etc/ skel.
Команда adduser в системах Deblan и Ubuntu
В допол нение к семейству команд uвeradd, линия Deblan также предостав­
ляет нескол ько сценариев более высокого уровня дл я этих команд в виде
adduвer и deluвer. Эти дополн ител ьн ые команды настраиваются в файле
/etc/adduвer . conf, где можно указать такие параметр ы :
•
правила размещения дом а ш н и х каталогов: п о груп пам , по и м е н и пол ьзовател я
и т.д. ;
•
настройки разрешения для новых домашних каталогов;
•
диапазоны U I D и G I D для системных и общих пользователе й ;
•
возможность создания отдел ьных групп для каждого пользователя ;
•
квоты диска (тол ько булевские, к сожалению);
•
сопостамение имен пользователей и групп с помощью регулярных выражений.
Другие т и п и ч н ы е параметры команды u s eradd , такие как правила для парол е й ,
устанами ваются к а к параметры модуля РАМ , которы й выпол няет обычную аутенти­
фикацию пароля. ( П одкл ючаем ые модул и аутентификации РАМ обсуждаются в разделе
1 7. 3 . ) У команд adduser и deluser есть аналоги для груп п : addgroup и delgroup.
Команда adduser в системе FreeBSD
Система FreeBS D поставляется со сценариями оболочки adduser и rmuser,
которые можно испол ьзовать в готовом в иде ил и модифицировать в соот­
ветстви и с ваш и м и потребностя ми. Сценарии построены на ос нове средств.
предоставленных командой pw.
При желан ии команду adduвer можно испол ьзовать интеракти вно. По умолчанию
она создает записи пол ьзователе й и груп п и домаш н и й каталог. Можно указать сцена­
рию файл после флага -f, содержащий сп исок учетн ых записей для создания, ил и вве­
сти каждого пользователя в интеракти вном режиме.
Например, процесс создания нового пользователя r a ph a e l выглядит так.
$ sudo adduser
U s e r n ame : raphael
Ful l name : Raphael DoЬЬins
U i d ( Le ave emp t y f o r d e f a u l t ) : <re t u rn>
L o g i n g r oup [ r aph a e l ] : <re t u rn >
Глава 8. Управление учетными записями пользователей
293
Login g r oup i s raphae l . I nv i t e raph a e l i n t o o t h e r g r o up s ? ( ] : <re t u rn>
Login c l a s s ( de f a u l t ] : <re t urn>
Shell ( s h csh t c s h b a s h rbash n o l o g i n ) ( s h ] : Ьавh
Home di r e c t o r y ( /h ome / r ap h a e l ] : < r e t u r n >
Home d i r e c t o r y p e rrni s s i on s ( Leave ernp t y f o r d e f a u l t ) : < r e t u r n >
U s e p a s s wo rd - b a s e d a u t h e n t i c a t i o n ? ( ye s ] : < r e t u rn >
U s e an ernp t y p a s s w o r d ? ( ye s / n o ) ( n o ] : < re t urn>
Use а r a n d orn p a s s w o r d ? ( ye s /n o ) ( n o ] : уев
Lock out t h e a c count a f t e r c r e a t i o n ? ( no ] : < re t urn>
r apha e l
U s e rnarne
< r andorn>
Password
Raph a e l Dobb i n s
Fu l l Name
1004
Uid
Class
r apha e l
Gr oup s
/ home / r ap h a e l
Home
Ноте Mode
/ u s r / l oc a l / b i n / b a s h
Shell
no
Locked
ОК ? ( ye s / n o )
уев
addus e r : I N FO : S u c c e s s f u l l y added ( rapha e l ) t o the u s e r d a t a b a s e .
addus e r : I NFO : P a s s w o r d f o r ( raphae l ) i s : RSCAd s 5 f yOvxOt
Add anothe r u s e r ? ( y e s / no ) : no
Goodb ye !
Кома нда newusers в системе Li nux:
добавление пол ьзователей пакетом
При выполнении Linuх-команды newusers одновременно создается несколь­
ко учетн ых записей из содержимого подготовленного текстового файла. Это
не вполне формал ь н ы й способ, но им удобно пользоваться в случае , есл и
нужно добавить м ного пол ьзователей сразу, например при создании учетн ых
зап исей для учебной групп ы. Команда newusers в качестве аргумента полу­
чает входной файл, состоя щий из строк, подобно файлу /etc/passwd, за ис­
ключением того, что его поле пароля содержит начал ьн ы й пароль, заданный
открытым текстом. П оэтому хорошо подумайте о защите такого файла.
Команда newu s e r s прин и мает связан ные со сроком де йствия пароля параметр ы ,
установленные в файле /etc/ login . defs , но не коп ирует стандартн ые конфигураци­
он ные файл ы , как это делает команда useradd. Еди нстве н н ы й файл , которы й предо­
ставляется в этом случае , - файл . xauth.
В университетских системах действител ьно важно применять " пакетн ы й " сценарий
adduser, который испол ьзует с писок студентов из дан ных регистраци и для генерирова­
ния входной и нформации для команды newuser s . Для этого необходимо и меть имена
пользователе й , подготовленные в соответств и и с локал ь н ы м и правилам и при гаранти и
их ун и кал ьности (на локал ьном уровне ) , а также метод случайного ген ерирования па­
ролей при увел и ч и вающихся значениях идентифи каторов пол ьзователе й и групповых
идентификаторов для каждого студе нта. Возможно, вам луч ш е нап исать собстве нн ую
оболочку для команды useradd на языке Python, чем п ытаться приспособить свои нужды к тому, что предлагает команда newusers.
Часть 1. Основы администрирования
294
8.8. Б ЕЗОПАСНОЕ УДАЛЕНИЕ УЧЕТНЫХ ЗАПИСЕЙ
ПОЛЬЗОВАТЕЛЕЙ И ФАЙЛОВ
Когда пользователь покидает орган изацию, его учетная запись и файлы должны быть
удале н ы из систе м ы . Эта процедура включает удаление всех ссьmок на регистрацион ное
имя, которые были введе н ы вручную ил и с помощью команд useradd и rm.user. При
руч ном удалении учетной записи последовательность операций будет примерно такой:
•
•
•
•
удал ить записи пользователя из локальн ых баз дан н ых и телефонных списков;
удал ить пол ьзовател ьские почтовые псевдон и м ы из файла л ибо организовать пе­
ренаправление поступающих ему сообщен и й ;
удал ить пол ьзовател ьс кие задания из файла crontab , из очереди команды a t ,
а также из заданий на печать;
уничтожить пользовател ьские процессы , которые е ще вы полняютс я ;
•
удалить записи пользователя из файлов pas swd, shadow, group и gshadow;
•
удалить домаш ний каталог пользователя ;
•
•
•
удалить почтовый каталог пользователя (есл и почта хран ится локал ьно);
удалить записи в совместно используемых кале ндарях, системах бронирования но­
меров и пр.
удалить ил и преобразовать права владения л юбыми списками рассьm ки, испол ьзу­
е м ы м и удаленным пользователе м .
П еред тем как удалять домаш н и й каталог пол ьзователя , необходимо переместить из
него в другие каталоги все файл ы , которые нужны остальным пользователя м . Поскольку
не всегда можно с уверенностью с казать, какие файлы понадобятся , .а какие - нет,
лучше предварител ьно скопировать пол ьзовател ьские дома ш н и й и почтовый каталоги
на какой-то носител ь.
После удаления учетной записи пользователя убедитесь, что в системе не осталось фай­
лов с его идентификатором. Чтобы узнать точный путь к этим файлам , воспользуйтесь ко­
мандой find с аргументом -nouser. Поскольку команда find может вести поиск на сете­
вых серверах, проверяйте файловые системы по отдельности, задавая опцию -xdev.
$ sudo find filesys tem
-
xdev
-
nouser
Есл и в орган и зации за пол ьзователя м и закре плен ы отдел ьные рабоч ие ста н ц и и ,
эффективнее всего переинсталлировать систе му, п режде ч е м предоставлять ее новому
пол ьзовател ю. Но не забудьте сбросить на с исте м н ы й жесткий диск локал ьные файл ы ,
которые могут понадобиться в будущем. 1 1
Каждая система из наших примеров имеет команды , с помощью которых она авто­
матизирует процесс удаления пользователя . Если эти команды не отвечают ваш и м высо­
ким требования м , можете допол н ить их функциональные возможности предоставлени­
ем расширенного списка мест хранения данных о пол ьзователях.
В с истемах Deblan и Ubuntu команда deluser представляет собой сцена­
рий на языке Perl , который вызывает обычную команду userde l , аннул ируя
все результаты работы команды adduser. П ри этом вызы вается сценарий
user/local / sЬin/deluser . local , если таковой существует, чтобы реа­
л и зовать несложную операцию локализации. Файл конфигурации / e tc/
deluser . conf позволяет установить следующие опции:
11 Помните о лицензион ных кл ючах!
Глава в. Управление учетными записями пользователей
•
удалять л и домаш н и й и почтовый каталоги пол ьзователя ;
•
резервировать л и файлы пользователя и куда поместить резервные копии ;
•
удалять ли все файл ы . которым и владел пользовател ь;
•
удалять ли группу, есл и в дан н ы й момент она не имеет членов.
RHEL .
•
295
В систем е Red Hat п редусмотре н сценарий userdel . loca l , но не предус­
мотрен ы префиксные и постфиксные сценар и и для автоматизации опера­
ций по резервированию файлов пользователя , подлежащего удал е н и ю .
Сценарий rmsuser в с истеме Free B S D представляет собой превосход н ы й
и нструмент для удале н ия файлов и процессов пользователей. С н и м не мо­
гут сравн иться н и какие программ ы userdel других поставщиков.
8.9. БЛОКИРОВАНИЕ РЕГИСТРАЦИОННЫХ ИМЕН ПОЛЬЗОВАТЕЛЕЙ
И ногда возникает необходимость временно откл юч ить учетную запись пользователя .
Проще всего сделать это, поставив звездочку ( * ) или какой-то другой символ в поле за­
шифрован ного пароля в файле /etc/ shadow или /etc/master . pas swd. Эта мера пре­
пятствует бол ь ш и нству типов доступа, управляем ых паролем , п оскол ьку деш ифровка
больше не может привести к получению какого-либо приемлемого пароля .
•
Систе ма Free B S D позволяет блокировать учетны е зап и с и с помощью ко­
манды pw. Например , команда
$ sudo pw lock пол ь зова тель
помещает строку * LOCKE D * в начало хешированного пароля , блокируя учет­
ную запись.
Во всех дистрибути вах Linux, рассматри ваемых нами в качестве при меров.
команды usermod -L поль зова тель и usermod -U поль з о в а тель позво­
ляют ле гко соответстве н но блокировать и разблокировать парол и . Флаг -L
просто помещает сим вол " ! " перед заш ифрован н ы м паролем в файле /etc/
shadow, а флаг u удаляет его.
-
К сожален и ю , модификация пароля пользователя п росто приводит к блокированию
регистраци и . П р и этом пользовател ь не уведомляется о блокировке пароля и не полу•1а­
ет разъяс нен и й , почему его учетная запись бол ьше не работает. Ал ьтернативный способ
блокировать регистрацион н ые имена состоит в замене интерп ретатора команд пол ьзо­
вателя программой , которая выдает сообщен ие, поясняющее , почему учетная запись от­
ключена, и содержащее инструкции по исправлению ситуаци и . Затем программа завер­
шается и вместе с ней заканчивается сеанс регистрации.
Этот метод им еет как пре и мущества, так и недостатки. Те форм ы доступа, которые
проверя ют парол и , но не обращают внимания на интерпретатор команд. н е будут забло­
кирован ы . М ногие демоны , предоставляющие доступ к системе без регистрации (напри­
мер, ftpd}, проверяют, упомянут л и и нтерпретатор пользователя в файле /etc/shells.
Есл и он там не указан , вход в с исте му будет запрещен ( и м е н но это нам и требуется ) .
К сожалению, этот метод нел ьзя назвать ун и версальн ы м . П оэтому, есл и дл я блокирова­
н ия учетных записей вы реш ите модифицировать интерпретатор команд, вам придется
провести дополн ител ьные исследования с воей с исте м ы .
Кроме того , пояс няющее сообщение нельзя увидеть, если пользователь пытается за­
регистрироваться в системе в окон ной среде или посредством эмулятора терминала, ко­
торый не позволяет увидеть сообщен и я после выхода из систе м ы.
296
Часть 1. Основы администрирования
8.1 о. УМЕНЬШЕНИЕ РИСКА с помощью МОДУЛЕЙ РАМ
Подкл ючае м ы е модул и аутентифи кац и и ( PluggaЫe Authentication M odules - РАМ )
подробно описан ы в разделе 1 7 . 3 . В н их сосредоточено управление систе м н ы м и сред­
ствам и аутентификации посредством стандартн ых библ иотечных утил ит, чтобы такие
програ м м ы , как login, sudo , pas swd и su, н е должны был и предоставлять собствен н ы й
код аутентификаци и . М одул и РАМ умен ьшают риск, присущий отдельно взятым про­
грам м н ы м продуктам , позволяют администраторам устанавл ивать политики безопасно­
сти , действующие в рамках всего хоста сети , а также определяют простой способ добав­
ления в с исте му новых м етодов аутентификаци и .
Добавление и удаление учетных записей пользователей не предусматри вает измене­
ние конфигурации модулей РАМ , но испол ьзуе мы е для этих целей инструме нты долж­
ны действовать по правилам РАМ и в соответстви и с требован и я м и РАМ . Кроме того,
м ногие параметры конфигурации РАМ подобн ы тем , которые используются командами
useradd или usermod. Есл и вы измен ите како й - н ибудь параметр ( как описано н иже
в этой главе) , а команда useradd, казалось б ы , не обратит на это внимания, проверьте ,
не аннулировала л и системная конфигурация РАМ ваше новое значение.
8.1 1 . Ц ЕНТРАЛИЗАЦИЯ УПРАВЛЕНИЯ УЧЕТНЫМИ ЗАПИСЯМИ
В средн их и крупн ых корпорациях всех типов (акаде м ических, частн ых и л и госу­
дарстве н н ых) важно испол ьзовать определ е н н ую форму це нтрализованного управления
учетн ы м и зап исям и . Каждый пользователь должен и меть на хосте уникальное , удобное
и безопас ное регистрацион ное и м я , идентификатор ( U I D) и парол ь. Администраторам
нужна централ изованная система, которая бы н емедленно обеспечивала повсеместное
распространение изменений (например, аннул ирование конкретной учетной записи).
Такая централ и зация может быть достигнута разл и ч н ы м и способа м и , бол ьш и нство
из которых (включая систему Active Directory компании M icrosoft) в той или и ной степе­
н и (от бесплатн ых инсталляций с открытым исходн ым кодом до дорогих комм ерческих
с исте м ) ис пол ьзует упроще н н ы й протокол доступа к сете в ы м каталогам ( Lightwe ight
Directory Access Protocol - L DAP).
П ротокол LDAP и служба Active Di rectory
W Подробнее о п ротоколе LDAP и его реализациях рассказывается в разделе 1 7. 2 .
П ротокол L DA P п редставляет собой обобще н н ы й репозитори й ( н аподобие базы
дан н ых) , который может хра н ить дан н ы е , связан н ые с управл е н и е м пол ьзователя м и ,
а также другие т и п ы дан ны х . О н испол ьзует иерархич ескую модел ь " кл иент-сервер" ,
которая поддерживает несколько серверов и нескол ько одновременно работающих кли­
ентов. Одно из самых бол ьш их преимуществ LDAP как централизованного репозитория
для учетных дан н ы х состоит в том , что он может обеспечить в с истемах уникальность
идентификаторов U I D и G I D . Кроме того, он хорошо стыкуется с Wi ndows, хотя обрат­
ное утверждение справедли во л и ш ь в самой малой степен и .
Служба Active Directory ком пании M icrosoft использует протокол ы L DAP и КеrЬегоs
(сетевой протокол аутентификации ) и может управлять множеством типов дан н ых, вклю­
чая дан ные пользователей. Она ведет себя несколько "эгоистично" , навязывая "свою ли­
нию" при взаимодействии с U N IX- или Linuх-репозиториями LDAP. Если вам нужна еди­
ная система аутентификации для хоста, который включает Windоws-компьютеры , а также
Глава 8. Управление учетными записями пользователей
297
U N IX- и Linuх-системы , то, возможно, проще всего позволить службе Active Directory ис­
пользовать ваши U N IХ-базы данных LDAP в качестве вспомоrательных серверов.
Подробнее вопросы и нтеграции систем U N IX и Linux со службам и L DAP, Kerberos
и Active Directory см. в главе 1 7 .
Системы " еди ного входа "
Систем ы с однократной идентификацией пользователе й (single sign-on
SSO) уравно­
вешивают удобства пользователя с проблемами безопас ности. Их основная идея состоит
в том, чтобы пользователь, один раз зарегистрировавшись (в ответ на соответствующее
приглашение на веб-странице или в окне Wi ndows) , мог затем переходить, к примеру,
из одного раздела в другой без повторной аутентификац и и . Инач е говоря, пользователь
получает аутентификацион н ы й мандат (обычно в неявном виде , чтобы не требовалось
больше никакого активного управления) , которы й затем можно использовать для доступа
к другим ком пьютерам и приложен иям. Пользователь должен помнить только одну после­
довательность (а не м ного) , состоящую из регистрационного имени и п ароля.
Эта схема позволяет усложнять мандаты (поскольку пользователю н е нужно помн ить
о них и вообще и меть с н и м и дело) , которые теоретически повышают степень сложно­
сти . Однако влияние с компрометированной учетной записи в этом случае усили вается,
поскольку одно регистрационное имя предоставл яет взломщику доступ сразу к несколь­
ким ком пьютерам и приложе н и я м . Систе м ы SSO переносят " арену действий " из на­
стольного ком пьютера (пока вы спокойно регистрировались) в зону особой уязвимости .
Кроме того, узк и м м естом с исте м ы становится сервер аутентификации. Если он " упа­
дет" , вся работа организации остановится.
Н есмотря на то что в основе с истем ы SSO лежит простая идея , она предполагает
большую внутрен н юю сложность, пос кол ьку различные приложе н и я и ком п ьютеры ,
к которым пользователь хотел получить доступ, должны пони мать процесс аутентифи ­
кации и SSО-мандаты.
Существует ряд систем SSO с открытым исходным кодом :
-
•
•
JOSSO, сервер SSO с открытым исходным кодом , написанн ы й на языке Java;
служба CAS (Central Authent ication Service ) , созданная Й ельс к и м университетом
(на языке Java) ;
•
продукт Snibboleth, система SSO с открытым кодо м , распространяемая по лицен­
зии Apache 2.
Существуют также ком мерческие с исте м ы , большинство из которы х инте грировано
с семействам и програм м н ых продуктов , предназначен н ы м и дл я управления учетн ы м и
данными (о н их пойдет речь в следующем разделе ) .
Системы управления учетн ыми да нн ы ми
Управление учетн ы м и дан н ы м и (ident ity management)
это последни й п ис к моды
в области управления пол ьзователя м и . Если говорить проще, то этот тер м и н означает
идентиф и кацию пользователей конкретной систе м ы , аутентифицирование и х лично­
стей и предоставление привилег и й н а основе этих аутентифицирован н ых л и чностей .
Стандартизация этой деятельности проводится такими орган изациями , как World Wtde
Web Consortium и The O pen G roup.
Коммерческие систе м ы управлен и я учетны м и дан н ы м и сочетают несколько клю ­
чевых кон це п ц и й U N IX в в иде графичес кого и нтерфейса, " пр иправлен ного" тер м и -
Часть 1. основы администрирования
298
нам и из сферы маркети н га . Основ н ы м элеме нтом для всех этих систе м я вляется база
дан ных, которая содержит и нформацию, связан ную с аутентифи кацие й и авторизацией
пол ьзователе й , часто хран имую в формате LDAP. Управление реал изуется на базе таких
поняти й , как груп п ы U N \ X, а огран иче н н ые админ истрати вные права усили ваются по­
средством таких утил ит, как sudo. Большинство таких систем было разработано с цел ью
уре гул и рования требован и й , диктуемых с точки зрения возможности идентификаци и ,
использован ия контрольных записей и слеже ния за н и м и .
Создано м ного ком мерческих систем в этой сфере, например: l dentity M anagement
(Oracle), Sun ldentity Management Suite 1 2 , Courion, Avatier ldentity Management Suite (AI M S)
и В М С l dent ity M anagement Suite. Оценивая с исте м ы управления учетны м и дан н ы м и ,
ищите следующие функции .
•
Контроль:
•
•
•
•
интерфейс, при испол ьзовании которого наем менеджеров может потребовать,
чтобы учетн ые зап ис и предоставлялись в соответствии с рол ью;
возможность согласования с базами данных кадров для автоматического уда­
ления доступ а для служа щих, которые уволены или сокращен ы .
Управление учетн ы м и записям и :
•
•
•
•
•
•
•
безо п ас н ы й веб- и н терфейс дл я управл е н и я , досту пного как изнутр и , так
и снаружи организации;
генерирован ие глобальных уникальных идентификаторов пользовател е й ;
возможность создания , изменения и удаления пол ьзовательских учетн ых за­
писей в орган изации на оборудован и и и операцион ных системах всех типов;
возможность простого отображе ния имен всех пол ьзователе й , которые имеют
определенн ы й набор привилеги й ;
простой способ отобразить всех пользователе й , имеющих определенные при­
вилеги и , а также все привилеги и , предоставленные кон кретному пользовател ю;
управление доступом на основе ролей, в ключая и н и циал и зацию учет н ы х за­
п исей п ол ьзователей с испол ьзованием ролевого принципа; создание исклю­
чений дл я предостамения прав на основе ролей, включая организацию дейст­
вий для рассмотре н ия искл ючен и й ;
регистрация с перестра и ваемой конфи гурацией всех и з м е н е н и й и де йстви й
админ истратора и создание реконфигурируемых отчетов на основе ре гистра­
ционн ых да н н ых (по пользователю, по дате и пр. ) .
Удобство использования:
•
•
возможность для пол ьзо вателей менять их пароли глобал ьно в одной операции;
возможность разре ш ит ь пол ьзователя м изменять ( и восстанавл ивать) соб­
стве н н ые парол и при соблюдении правил выбора сил ьных паролей.
Расс мотрите также , как реал изована система с точ ки зрения того, какие в действи­
тел ьности выполня ются ауте нтификации и авторизации. Требуется л и системе повсе­
местная и нсталляция пол ьзовател ьских агентов или возможно самостоятел ьное согласо­
вание с базовым и системами?
1 2 Теперь, коrда компания Oracle купила Sun, не ясно, выживет л и эта система как продукт после
завершения процесса поглоще н и я .
глава
9
Обла чные вы числения
Облачные вычисления - это практика лизинга комп ьютерн ых ресурсов из пула об­
щей ем кости. Облачн ы е службы предоставл я ют пол ьзователя м ресурсы по их требова­
нию и получают за это установленную цену. Компан и и , испол ьзующие облако, быстрее
выходят на рынок, де монстрируют большую гибкость и несут м е н ьш и е капитальн ые
и эксплуатацион ные расходы , чем предприятия , управляющие традицион н ы м и центра­
ми обработки данных.
Облако - это реал изация " ко ммунал ьн ы х вычислени й " , впервые задуманная уче­
н ы м - програм м истом Джоном Мак- Карти, которы й о п исал эту идею в одной беседе
в Массачусетском технологическом и нституте в 1 96 1 году. М ногоч исл е н н ые техноло­
гичес кие достижен и я , появивш иеся за прошедшее вре м я , помогл и воплотить эту идею
в жизн ь. П еречисл и м л и ш ь некоторые из них.
•
•
•
•
Программ ное обеспечение виртуализации надежно выделяет ресурсы централ ьн ых
процессоров, памяти , хранилища и сети по требованию.
Н адежн ые слои безопасности изол ируют пользователе й и виртуал ьные м а ш и н ы
друг о т друга, даже есл и они совместно испол ьзуют базовое оборудование.
Стандартизированные аппаратн ые компоне нты позволя ют создавать центры об­
работки данных с огром н ы м и мощностя м и , ресурсам и хранения и с истемами ох­
лаждения.
Надежная глобал ьная сеть соединяет все это в месте.
Облачн ы е провайдеры испол ьзуют эти и м ногие другие и н новаци и . О н и предлага ­
ют множество услуг, начиная о т размещения частн ых серверов и заканчивая полностью
управляе м ы м и приложе н и я м и . Ведущи е поставщики облач н ых технологий я вл я ются
кон курентоспособн ы м и , высокодоходными и быстро растущими ком паниям и .
Часть 1. Основы администрирования
300
В этой главе излагаются мотивы перехода в облако, описы ваются некоторые из ос ­
новных поставщи ков облачн ых вычисл е н и й , рассматриваются сам ые важные облач ные
службы и предлагаются советы по контрол ю затрат. В качестве еще более краткого вве­
ден ия в разделе 9.4 показано, как создавать облачные серверы из командной строки.
Управление облач н ы м и серверами упоми нается еще в нескольких разделах этой к н и ­
ги, которые пере ч ислен ы в таблице 9. 1 .
Таблица 9 . 1 . Разделы , в которых рассматриваются темы ,
связанные с облачными вычислениями
Раздел
Название и тема раздела или подраздела
2. 1 0
Восстановление облачных систем (проблемы, связанные с загрузкой для облака)
1 3. 1 5
Облачные сети (сеть TCP/I P для облачных платформ)
1 9. З
Веб-хостинг в облаке
24.6
Packer (использование инструмента Packer для создания изображений ОС для облака)
25.4
Контейнерная кластеризация и управление (особенно в разделе, посвященном AINS ECS)
26.4
Непрерывная интеграция и развертывание на практике (пример конвейера Cl/CD, использую­
28.7
Инструменты мониторинга коммерческих приложений ( инструменты мониторинга для облака)
щего облачные службы )
Кроме того, облачные систем ы часто упоминаются в главе 2 3 .
9. 1 . ОБЛАКО В КОНТЕКСТЕ
П ереход от серверов в ч астн ых центрах обработки дан н ых к современ ному вездесу­
щему облаку был быстр ы м и драмати ч н ы м . Давайте посмотрим на прич и н ы этого мас­
сового движения.
Облачные провайдеры создают техн ически развитую и нфраструктуру, которую бол ь­
ш инство компани й не могут себе позвол ить по финансовым соображен и я м . О н и разме­
щают свои центры обработки дан н ых в районах с недорогой электроэнергией и много­
ч исл е н н ы м и сетевыми коммутаторам и . Они разрабатывают пользовател ьские серверные
ш асс и , которые м акс и м изируют энергоэффе кти вность и м и н и м изируют сто и мость
эксплуатации . Они используют спе циал ьно создан ную сетевую и нфраструктуру со спе­
циал ьн ы м аппарат н ы м и п рогра м м н ы м обеспече н и е м , точно настрое н н ы м на и х вну­
трен н ие сети . Они проводят и нте нсивную автоматизацию, чтобы обес печить б ыстрое
рас ш ирение и уме н ьш ить вероятность человеческой ошибки.
Благодаря всем эти м инженерны м усилиям (не говоря уже об экономии за счет мас­
штаба) стоимость распределенн ых вычисл ительных услуг для облач ного провайдера на­
м ного н иже , чем для типичной ком пан и и с н ебол ьш и м центром обработки дан н ых.
Экономия затрат отражается как на цене облачн ых услуг, так и на прибьт и поставщиков.
Н а этой аппаратной основе создан ы элементы управл е н и я , упрощающие и облегча­
ющие настрой ку инфраструктуры . Облачн ы е поставщики предлага ют как и нтерфейсы
прикладного програ м мирован и я , так и инструменты , ориентирова н н ые на пользовате­
л я , которые контрол ируют предоставление и освобождение ресурсов. В резул ьтате весь
ц и кл жизненного ц и кл а систе м ы ил и гру пп ы систе м , распредел е н н ых в в иртуал ьной
сети , может быть автоматизирован. Эта концепция носит название " и нфраструктура как
код" и резко контрастирует с процедурам и закупки и подготовки руч ного сервера про­
шлых времен .
Глава 9. Облачные вычисления
301
Гибкость - еще одн а важная движущая сила внедрения облаков. Поскольку облач­
ные систем ы могут предоставляться и освобождаться автоматически, л юбая ком пания,
имебщая циклический с прос , может оптим изировать эксплуатационные расходы за счет
добавления дополн ительных ресурсов в периоды максимального использования и уда­
ления допол нительной е мкости, когда она больше не нужна. Встроен н ы е функции ав­
томатического масштабирования , доступные на некоторых облачных платформах, упро­
щают этот процесс.
Облачн ые провайдеры имеют глобальное присутствие на рынке. Приложив опреде­
ленные усилия по план ированию и проектировани ю , предприятия могут выйти на но­
вые рынки, предложив услуги в нескольких географических регионах. Кроме того , вы­
полнить авар и йное восстановление в облаке проще , чем в частных центрах обработки
данных, поскольку резервн ые с истемы могут физически находиться в разн ых местах.
W Дополнительную и нформацию о методике DevOps см . в разделе 3 1 . 1 .
Все эти характеристики хорошо сочетаются с методикой системного адми нистриро­
вания DevOps, делающей акцент на гибкости и повторяемости . В облаке вы больше не
ограничены медленными процессами закупок или подготовки, и почти все можно авто­
матизировать.
Тем не менее от вас требуется определ е н н ы й умстве н н ы й скачок, потом у что вы
больше не контрол ируете свое собственное оборудование. Эту с итуац ию хорошо опи­
сывает одна промышленная м етафора: серверы следует рассматри вать как скот, а не как
домашних животных. Домашнему животному дают и м я , его л юбят и лелеют. Когда до­
машнее животное болеет, его несут к ветеринару и лечат. Н апротив, крупн ы й рогатый
скот - это товар, который пасется, продается и перемещается в бол ьших коли чествах.
Заболевш и й крупн ы й рогатый скот пристреливают.
Облач н ы й сервер - это всего л и ш ь один из членов стада , иначе пришлось бы игно­
рировать базовы й факт облачных вычислен и й : облачные системы являются эфемерны­
ми, и они могут выйти из строя в любое время. Планируйте эту ситуацию, и вы будете
более успешны при работе с отказоустойчи вой инфраструктурой.
Несмотря на все свои преимущества, облако не я вляется панацеей для быстрого сни­
жения затрат или повышения производительности. Н епростой пере нос существующе­
го корпоративного приложен и я из центра обработки данн ых в облач н ы й провайдер (по
принципу " поднять и пере нести ") вряд ли будет успешным без тщательного планирова­
ния. Для облака нужн ы другие процессы эксплуатаци и , которые требуют обучения и те­
стирования. Кром е того, большинство корпоративных програм м предназначено для ста­
тических сред, но отдельные системы в облаке следует рассматривать как недол говечные
и ненадежные. Система называется облачной, если она надежна даже перед л и цом не­
предвиден н ых событий .
9.2 . ВЫБОР ОБЛАЧНОЙ ПЛАТФОРМЫ
На выбор поставщика облачных услуг влияет м ножество факторов. Вероятно, опре­
деленную роль будут играть стоимость, прошл ый опыт, совместимость с существующи­
ми технология м и , безопасность, требован ия соответствия и внутрен н яя пол итика. На
процесс отбора также может повл иять репутация , размер провайдера, фун кции и, ко­
нечно же , маркетин г.
К счастью, существует много облачных провайдеров. М ы решил и сосредоточиться
только на трех основных провайдерах облачных услуг: Amazoп Web Services (AWS) , Google
Часть 1. Основы администрирования
302
Cloud Platfoпn (GCP) и DigitalOcean ( DO). В этом разделе мы упомянем несколько допол­
н ительн ых вариантов. Основные и гроки в этой области перечислены в табл. 9.2.
Таблица 9 . 2 . Наиболее wироко испол ьзуемые облачные платформы
Проваiдер
Отличительные черты
Amazoп We b Se rvi ce s ... ... O�POt.1� �1.�. Pa �t.1e. P:...� �'�!.PO e ..�.�.e.,[1pe.�.� e. ..�.�.�O.�a.L\�.� · . �.ОJКе.т ..быть до
. ро�О�:
Dig i talOceaп
.
��О)l(Н�я
Простая и надежная . Имеет удобный интерфейс прикладного программирования.
Хороша для разработки
G oogle Cloud Platform Технически сложная и быстро совершенствующаяся . Делает акцент на производи .
.... .. . ........ ...... ... " . ................. ..................... !.е.�.��.О?.!.�.: .�.t.1е.е.!...��Р.О ��.� ..�.n._е.�!.Р ...У��У.� П.О .П.е.Р.е.!:l��е.. .�.�.�.�.�.�..,!\З..� ��.1� . ...... ... . .. . . .. . ... ... . ... .
IBM Softlayer
Больше похожа на хостинг, чем на облачную платформу. Имеет глобальную част­
·················
.
.
..
..
.
·······-····
сеть
Micros oft Az ure
Вторая по размеру, но далеко отстает от первой. Имеет историю отключений .
. . .... ...... ......... ... .... . .... ............ .... . ......... ... . ...�О.�.t.1.0.'."�0.�...�.З..��-�-�-�-а.е..т.��� t.1.З.��� ?.О �торо � ы м_� г�� ин ов M i cros oft . . .
OpeпStack
Модулярная DIY платформа с открытым исходным кодом для создания частных об.
�З.�ОВ:
�t.le.e.!. ���?.O�t.1e.�!.�t.1�1e � �!.е. Р Фе. йсы прикладного программирования
..
- . - . . . ..
· · · · . . .... . . . . . ..... . ..........
Racks pace
-
VMware vCloud Ai r
Открытые и частные облака, реализующие проекты OpeпStack. Предлагает управ­
ляемые
для
. службы
. .
. . AWS и Azure. Имеет фанатичных сторонников
Заумный сервис для публичных, частных и гибридных облаков. Использует техно­
логию VMware. Вероятно, обречен
Публ и ч н ые, ч астные и гибри д ные обл а к а
В публичном облаке поставщик контролирует все физическое оборудование и предо­
ставляет доступ к с истемам через И нтернет. Это с н имает с пользователей обяза нность
и нсталлировать и обслуживать оборудован ие, но за счет меньшего контроля над фун к­
циям и и характеристиками платформ ы . AWS, G C P и DO я вляются общедоступны м и об­
лач н ы м и провайдерами.
Ч астные облач ные платформ ы аналоги ч н ы , но размещаются в собственном центре
обработки дан н ы х органи зации ил и управля ются поставщиком от имени одного кл и­
ента. Серверы в частном облаке я вл я ются единстве н н ы м и арендаторам и , а не делят е го
с другим и клиентами , как в общедоступном облаке.
Ч астн ые облака обес п е ч и вают гибкость и п рограм м н ы й контрол ь, так же , как
и обы ч н ые облака. Они привлекательны для орган изац и й , которые уже ин вестировали
значительный капитал в оборудовани е , а также для и нженеров, особе нно тех , которые
ценят пол н ы й контроль над своей средой.
OpenStack - это ведущая система с открытым исход н ы м кодом , ис пол ьзуе мая
для создания частн ых облаков. Она получает финансовую и техн ическую поддержку
от таких предприяти й , как АТ & Т, I BM и l ntel. Rackspace сама по себе я вляется одн им
из крупнейших участников Open Stack .
Комбинация публичных и частн ых облаков называется гибридным облаком . Гибриды
могут быть полезн ы м и , когда предприятие с начала переходит с локал ьн ы х серверов
в публичное облако, для добавления времен ной е мкости обработки п и ковых нагрузок
и реализации других сценариев. Администраторы должн ы быть осторожн ы м и : работа
с двумя разл и ч н ы м и облачн ы м и платформам и в тандеме непропорционально увеличи­
вает сложность.
Облако VМware vSphere Air, основанное на технологии виртуал изации vSphere , пред­
ставляет собой удобное гибридное облако для клиентов, которые уже испол ьзуют вирту-
Глава 9. Облачные вычисления
303
ализацию VMware в своем локальном центре обработки да н н ы х . Эти п ол ьзователи могут
прозрачно перемещать приложения в и нфраструктуру vC\oud Air и и з не е.
Термин публичное облако является немного неудачным и вызывает опасе н и я , связан н ые
с безопасностью. На самом деле пользователи публичных облаков изолированы друг от друга
несколькими слоями аппаратной и программной виртуализации. Частное облако практически
не имеет преимущества в области безопасности над публичным облаком .
Кроме того , работа с частны м облаком - это сложн а я и дорогостоя щая перспекти­
ва, которую нельзя предприн имать необдуманно. Только крупнейшие и наиболее совер­
шенные организации и меют и нженерные ресурсы и фи на нс о в ы е средства , н еобходи м ы е
дЛЯ внедрения н адежного , безопасного частного обл а к а В то ж е врем я , после реал и ­
зации функции частного облака обычно н е соответствуют тем , которые предлагаются
коммерческими облаками.
Для большинства организаций мы рекомендуем публ и ч ное облако над част н ы м и или
гибридны м и опция м и . П убличные облака предлагают наивысшую ценность и простоту
администрирован ия. В оставшейся части этой книги мы огра н и ч и м с я публ и ч н ы м и об­
лаками . В следующих нескольких разделах представлен краткий обзор каждой из при­
веденных выше платформ .
.
Amazon Web Services
AWS (Amazon �Ь Services) предлагает множество услуг: от в иртуальных серверов ( ЕС2)
до управляемых баз данных, хранилищ дан н ых (RDS и Redshift) и бессерверных фун кц ий
выполняемых в ответ на события ( LamЬda) . Кажцый год компан ия AWS выпускает сотни об­
новлений и новых функций. Она имеет самое большое и самое активное сообщество поль­
зователей. AWS - безусловно, самая крупная ком пания в области облачных вычислений.
С точки зрения большинства пользователе й , AWS имеет практически неограничен­
ные возможности . Однако новые учетные записи и м е ют огра н и ч е н и я , которые опред е­
ляют, какой объем вычислител ьной мощности вы можете запросить. Эти о гра нич е ния
защищают как Amazon, так и вас , поскольку затраты м о гут быстро в ы р ваться из- под
контроля , если услуги не будут долж н ы м образом управлятьс я . Ч тобы увел ичить свои
лимиты, в ы должны запол н ить форму на сайте подде р жк и AWS . О гра н и ч е н и я , связан ­
ные с каждой службой , перечислены в документаци и по л и м и та м услуг.
Онлай н о вая доку м е нтац и я AWS , расположе н н а я по адр е с у aws . a m a z o n . c o m /
documentation , я вляется авторитетной , всеобъемлющей и хорошо ор г а н и зо ва н н о й . Это
должно быть первое место, которое вы рассм атриваете п р и исследо ва н и и к он к ре тн о й
услуги. Белые страницы, посвященные безопасности , пути м и грации и архитектуры , не­
оценимы для тех, кто заи нтересован в создании н адеж н ы х облачн ы х сред.
,
Google Cloud Platform
Есл и AWS я вл яется действующ и м ч е м п ионом в обл ас ти облач н ых в ы ч и сл е н и й то
компания Google я вляется его потен циал ьным прее м н и ком . Он ко н к ур и рует за клиен ­
тов, используя такие нечестн ые трюки, как сн ижение цен и пря м ое обраще н и е к боле­
вым точ кам AWS .
Спрос на инженеров настолько ожесточе н , что Googl e , как известно , браковала быв­
ших сотрудников AWS . В прошлом компания Google п ро вод ил а вечеринки параллельно
с конференцией AWS re: l nvent в Л ас- Вегасе, пытаясь п р и вл е ч ь как тал а нтл ивы х люде й ,
так и пользователей. По мере эскалаци и облач ных войн кл иенты в конечном итоге вы­
игрывают от этого конкурса в виде более н изких затрат и улуч ш е н н ы х ф ун к ц и й
,
.
Часть 1. Основы администрирования
304
G oogle испол ьзует самую передовую глобальную сеть в м и р е , которая приносит
пользу облач ной платформе . Центр ы обработки данных Google - это технологические
чудеса, которые п редлагают м ножество и нноваци й дл я повышения энергоэффективно­
сти и с ниже н ия э ксплуатацио н н ых затрат1 • Компания Google относительно прозрачна
в с воих операциях, а ее вклад с открытым исходным кодом помогает развивать обл ач ­
ную индустрию.
Несмотря на с вою тех н ическую подкован ность, по каким-то причинам ком пания
Google я вл яется пр и верже н це м публичного облака, а не л идеро м . Когда оно поя в и ­
лось в 2 0 1 1 - 20 1 2 rr. 2 , G C P уже опаздывала на и гру. Е е службы имеют м ного оди нако­
вых функций (и ч асто одни и те же и мена) , эквивал е нтных фун кциям AWS. Если вы
знакомы с AWS, то обнаружите, что веб-интерфейс GCP внешне несколько отличается
от AWS , но их функциональные возможности поразительно похожи.
Мы ожидаем , что в последующие годы GCP получит определ е н ную дол ю р ы н ка,
поскольку компания G oogle улучш ает с вою продукцию и укрепляет доверие клиентов.
Она наняла н екоторые из самых ярких умов в отрасли , которые должны разработать не­
которые инновационные технологии . Как потребители , м ы все выиграем от этого.
DigitalOcean
DigitalOcean - это другая разновидность публичного облака. В то вре м я как AWS
и G C P конкурируют за крупные п редприятия и стартапы , ориентированн ые н а рост,
DigitalOcean п р и вл е кает м ал е н ьких кл и е н то в с более п росты м и потребностя м и .
Название этой стратегии - м и нимализм . Нам нравится применять D igitalOcean дл я экс­
периментов и п роверок кон цепций.
D igitalOcean предлагает центры обработки дан н ы х в Северной Америке , Европе
и Азии . В каждом из этих регионов есть несколько центров, но они не связаны напря­
мую и поэтому не могут считаться зонами доступности (см. раздел 9 . 3 ) . В результате по­
строить глобальные высокодоступные производствен н ые службы на основе DigitalOcean
значительно сложнее, чем на основе AWS или Google .
Серверы DigitalOcean называются дроплетами (droplet) . О н и просто управляются и з
командной строки или веб-консоли и быстро загружаются . DigitalOcean поставляет об­
разы для всех наших демонстрационных операционн ых систе м , кром е Red Hat. Он так­
же имеет несколько образов для популяр н ых приложений с открытым исходным кодом,
таких как Cassandra, Drupal, Django и Git Lab.
Платформ а DigitalOcean также имеет фун кц и и балансировки н агрузки и хран е н ия
блоков. В главе 26 м ы п р и води м пример п редоставл е н и я балансировщика нагрузки
DigitalOcean с двумя дроплета м и с использованием инструме нта обеспечен и я и нфра­
структуры Terraform ком пании HashiCorp.
9.3 . Основы РАБОТЫ с ОБЛАЧНЫМИ СЛУЖБАМИ
Облачные службы слабо групп ируются по тре м категориям.
•
И нфраструктура как услуга ( Infrastructure-as-s- Service - I aaS) , в которой пол ьзо­
ватели запрашивают исходны е ресурсы вычислен и й , памяти , сети и хран или ща.
1 См . сайт Google . com/ aЬout/datacenters , на котором можно найти фотографи и и факты о
том , как работают центры обработки дан н ых Google.
2Компания Google выпустила другие облачные продукты уже в 2008 г" включая Арр Engine, первый
продукт платформы. Однако стратегия Google и бренд GCP не были очевидны до 20 1 2 г.
Глава 9. Облачные вычисления
305
Обычно о н и поставля ются в в иде виртуальных частн ых серверов , а также VPS .
Пользователи IaaS отвечают з а управление всем: операционн ы м и системам и , се­
тям и , системами хранения и собствен н ы м программ н ым обеспечением.
•
Платформа как услуга ( Platform-as-s- Service - Paa S ) , в которой разработч и к и
представля ют с в о и специализирован н ы е п р иложе н и я , упакова н н ы е в форм ате ,
указанном поставщиком. Затем поставщик запус кает код от и м е н и пользователя .
В этой модели пользовател и несут ответствен ность за с вой собствен н ы й код, а по­
ставщик управляет операцион ной с истемой и сетью.
•
П рогра м мное обеспечение как услуга ( Software -as-s-Service - SaaS) - самая ш и ­
рокая категори я , в которой поставщик разме щает програ м м ное обес п е ч е н и е
и управляет и м , а пользователи платят абонентскую плату з а доступ. Пользователи
не поддерживают н и операцион ную систему, н и приложение. П очти л юбое разме­
щенное веб-приложение ( например, Word Press) попадает в категорию SaaS .
В табл . 9 . 3 показано , как каждая из этих абстрактн ых моделе й разбивается на слои ,
связанные с пол н ы м развертыванием.
Таблица 9 . 3 . На каких споях вы отвечаете з а управление?
laaS
PaaS
.(
.(
.(
.(
.(
Спой
Локальный•
Приложение
.(
Базы данных
Время выполнения приложения
Операционная система
Виртуальная сеть, хранилище и серверы
Платформа виртуализации
Физические серверы
Системы хранения
Физическ ая сеть
Мощность, пространство и охлаждение
.(
.(
.(
.(
.(
SaaS
.(
.(
.(
.(
.(
.(
.(
' Локальный: локальные серверы и сеть
laaS
PaaS
SaaS
-
инфраструктура как услуга ( виртуальные сервер ы ) .
платформа как услуга ( например, Google Арр Епgiпе ) .
программное обеспечение как услуга ( например, большинство веб-служб).
-
-
Из этих вариантов I aaS я вляется наиболее подходящим для систе м ного адми нистри­
рован и я . В допол н е н ие к определ е н и ю виртуал ь н ы х комп ьютеров, поставщики laaS
виртуализируют связанн ые с ними аппаратн ые элементы, такие как диски (в настоящее
время используется более общи й терм и н - " блочн ы е устройства хранения дан н ы х " )
и сети. Виртуал ьные серверы могут посещать виртуальные сети , для которых в ы указы­
ваете топологию, маршруты , адресацию и другие характеристики.
В бол ьш и н стве случаев эти сети я вл яются частны м и для вашей организаци и . IaaS
также может включать в себя другие основные службы , такие как базы данных, очереди,
хранилища ключей-значений и вычисл ительн ые кластеры. Эти функции в совокупности
создают полную замену традицион ного центра обработки данн ы х (и во многих случаях
даже улучшение) .
306
Часть 1. Основы администрирования
PaaS - это область бол ьш и х обещан и й , которая еще не полностью реал и зован а.
Те кущие предложе н и я , такие как AWS Elastic Beanstal k , G oogle Арр Engine и H e roku ,
и м е ют э кологические огран и ч е н ия ил и н юанс ы , которые делают их н е п ракти ч н ы м и
( ил и непол н ы м и ) дл я испол ьзован и я в загруже н н ы х производствен н ых средах. Снова
и с н ова м ы в идел и , как бизнес перерастает эти услуг и . Одн а ко н о в ы м услугам в этой
области уделяется бол ьшое в н и м а н и е . В бл ижа й ш и е годы м ы ожидае м значител ь н ы х
улуч ш е н и й .
Облач н ы е поставщики широко различаются по своим фун кциям и деталям реализа­
uии, но концептуал ьно м ногие услуги оче н ь похожи . В следующих разделах описывают­
ся облачн ы е службы в целом , но поскол ьку AWS является л идером в этом пространстве ,
мы и ногда п ри н и маем е го номен клатуру и услов н ы е обозначе н ия в качестве значе н и й
по умолчан ию.
Доступ к обла ку
П ервичн ы й и нтерфейс бол ь ш и н ства облач н ы х провайдеров - это с воего рода веб­
интерфейс. Новые систе м н ы е адми н истраторы дол ж н ы испол ьзовать эту веб- консоль
дл я создания уч етной записи и для н астройки своих первых ресурсов .
Облачн ые прова йде р ы также определяют и нтерфейсы прикладного программ и рова­
н ия , имеющие доступ к тем же базо в ы м фун кциям , что и к веб-консол и . В большинстве
случаев у н их также есть стандартная оболоч ка командной строки , переносимая бол ь­
ш инством систе м для этих интерфейсов при кладного програм м и рован ия.
Даже ветера н ы с исте м ного адм и нистрирования часто испол ьзуют веб-графические
интерфейсы. Тем не менее важно также дружить с инструментам и командной строки , по­
с кол ьку они легче с п равляются с автоматизацией и повторяемостью. Испол ьзуйте сцена­
ри и , чтобы избежать утом ительного и вялого процесса запроса всего и вся через браузер.
Облач н ы е поставщи ки также поддержи вают ком пл е кты разработки програм м н ого
обес печения ( S D K) для м ногих популярн ых язы ков, чтобы помоч ь разработч икам ис­
пол ьзовать их и нтерфе й с ы прикл адного программирования . Сторо н н и е и н струме нты
ис пользуют S D K дл я упроще н и я ил и автоматизаци и определен н ых наборов задач . В ы ,
несо м н е н но, стол к нетесь с эти м и S D K, есл и напишете свои собстве н н ые инструменты.
Обычно для доступа к системам U N IX и Linux, работающим в облаке , испол ьзуется
ал горитм S S H с аутентификацией открытого ключа. Для получ е н ия допол н ительной и н ­
формаци и о б эффективном испол ьзова н и и S S H с м . раздел 2 7 . 7 .
Н е которы е поставщики облач н ых выч ислен и й позволяют получить доступ к сеансу
консол и через веб-браузер , что может быть особен н о полезн ы м , есл и вы ош ибочно за­
блокируете себя с помощью правила брандмауэра или сломанной конфигурации S S H .
Од нако это н е означает представл е н ие реальной консол и систе м ы , поэтому в ы н е мо­
жете испол ьзовать эту функцию для отладки начальной загрузки или проблем с B I OS.
Рег ионы и зон ы доступности
Облач н ые п ровайде р ы поддерживают центры обработки дан н ы х по все м у миру.
Несколько стандартных терм инов описывают особен ности , связа н н ы е с географией .
Регион - это область, в которой облач н ы й п ровайдер поддерживает центры обра­
ботк и дан н ы х . В бол ьш и нстве случаев ре гион ы назва н ы в честь территори и п редпола­
гаемого обслуживания, хотя сами центры обработки дан н ых более скон це нтрирован ы .
Глава 9. Облачные вычисления
307
Например, регион Amazon u s - e a s t - 1 обслужи вается центрами обработки дан н ых в се­
верной Вирджи н и и . 3
Некоторые провайдеры также имеют зон ы доступности ( ил и просто зон ы ) , которые
представля ют собой совокуп ность це нтров обработки дан н ы х в регионе . Зон ы внутри
региона просматри ваются в сетях с высокой пропускной с пособностью и н и зкой за­
держкой . поэтому межзонал ьная с вязь выполняется быстро, хотя и не обязател ьно де­
шево. Например, мы наблюдали межзонную задержку длител ьностью менее 1 мс.
Зоны обычно проекти руются так , чтобы быть независ и м ы м и друг от друга с точ ки
зрения мощности и охлаждения, и они географически распредел е н ы , так что стихий ное
бедствие, которое затрагивает одну зону, и меет ни зкую вероятность воздействия на дру­
гих людей в том же регионе.
Ре гионы и зоны имеют ос новополагающее значение для создания высокодоступных
сете вых услуг. В зависимости от требова ний доступности вы можете разверты вать свои
ресурсы в нескольких зонах и регионах, чтобы м и н и м изировать последствия сбоя в це н ­
тре обработки дан н ы х и л и в географической области. Откл ючения зон ы доступности
возможн ы , но редки ; регионал ьн ы е сбои происходят еще реже . Бол ьши нство служб ,
предоставляемых облач н ы м и провайдера м и , знают о зонах и испол ьзуют их для дости ­
же ния встрое н ной избыточности .
Регионы соединяются через
Интернет или через частные сети;
плата взимается в любом случае
Внутризонный
трафик является
бесплатным
Западный регион США
Межзонное соединение является
частным и оплачивается
в зависимости от объема
Восточный регион США
Рис. 9. 1. Серверы , распределенные между несколькими регионами и зонами
М ногоуровневые развертыван ия я вля ются более сложн ы м и из-за физических рас ­
стоя н и й между регионами и свя зан ной с н и м и бол ьше й задержки. Н е которые постав­
щики облач н ы х технологий испол ьзуют более быструю и надежную межре гионал ьную
сеть, чем другие. Есл и ваш сайт обслуживает пользователе й по все му миру, качество сети
вашего облачного поставщика имеет первостепен ное значение.
Выбирайте регио н ы в зависимости от географической бл изости к вашей пол ьзова­
тел ьской базе . Для сценариев, в которых разработч ики и пол ьзовател и находятся в раз­
н ы х гео графических регионах, подума йте над те м , чтобы ва ш и систе м ы разработки
были бл изки к разработч икам, а производствен н ы е систе м ы бл иже к пол ьзователя м .
) Для сигнала, передаваемого 110 шпическому волокну, требуется около 5 мс, чтобы преодолеть 1 000 км,
поэтому ре1·ион ы размером с восточн ое побережье США с точки зре н и я производительности вполне
приемлем ы . Сетевое под клю•1е ние, доступное ДJIЯ дата- центра, важнее, чем его точное местоположение.
308
Часть 1. основы администрирования
Для сайтов, предоставля ющих услуги для глобал ьной пользовател ьской базы, работа
в нескол ьких регионах может существен но повысить производител ьность для конечных
пользователей. Запросы могут направляться на региональные серверы каждого клиента,
испол ьзуя географическое DN S-разрешение, которое определяет местоположе н ие кл и ­
е нтов п о и х исходн ым I Р-адресам .
Бол ьш и нство облачн ы х платформ и м е ют регио н ы в Северной Америке , Южной
Амери ке, Европе и странах Азиатско-Тихоокеанского региона. Тол ько AWS и Azure н е ­
посредственно присутствуют в Китае. Н екоторые платформ ы , в частности AWS и vCloud ,
имеют ре гионы , совмести мые со строги м и федеральн ы м и требован и я м и I ТAR, прин я ­
т ы м и в С ША.
В и ртуальные частны е серверы
Флагманской службой облака я вляется виртуал ьн ы й частн ы й сервер , виртуал ьная
машина, работающая на ап паратном обеспеч е н и и провайдера. Виртуал ьн ые частн ые
серверы иногда н азы ваются экземплярами. В ы можете создать стол ько экзе м пл я ров,
с колько вам н ужно, запустив свою п редпочтител ьную операционную систему и прило­
же н и я , а затем закрыть экзе м пляры, когда они больше не нужны. В ы платите только за
то, что испол ьзуете , и обыч но не несете авансовых расходов.
П оскол ьку экзем пляры я вляются виртуал ьн ы м и маш инам и , их мощность процессо­
ра, память, размер диска и сетевые настройки могут настраи ваться , когда экзем пляр соз­
дается и даже корректируется постфактум . Открытые облач ные платформ ы определяют
предустановленные конфигураци и , назы ваемые типами экземпляров. О н и варьируются
от однопроцессорных узлов с 5 1 2 Мбайт памяти до бол ьших систем со м ногим и ядрами
процессора и нескол ькими Ти Б памяти. Некоторые ти пы экзе м пляров сбалансированы
для обще го использования , а другие специализируются на приложе н иях с процессором ,
памятью, диском или сетью. Конфигурации экземпл яров - это одн а из областей , в ко­
торой поставщики облач ных вычисл ен и й энергично кон курируют, чтобы соответство­
вать потребностям рынка.
Экземпляры создаются из образов, сохраненного состоя ния операцион ной системы,
которое содержит ( как м и н имум) корневую файловую с истему и загрузчик. Образ мо­
жет также включать в себя тома дисков для допол нительных файловых с исте м и других
настраиваемых параметров. Вы можете легко создавать собственные образы с помощью
собствен ного программного обеспечения и настроек.
Все наши иллюстративные операцион ные систе м ы испол ьзуются ш ироко, поэтому
облач ные платформ ы обычно предоставля ют для н их офи циальные образы .4 М ногие
сторон ние поставщики програ м м ного обесп ечения также поддерживают образы обла­
ков, которые и меют предустановленное програм м ное обеспечение для облегчения при­
нятия клиентам и .
Также легко создавать свои собствен н ые образы. Подробнее о том , как создавать об­
разы виртуальной маш и н ы в пакете , см. раздел 24. 5.
Сети
Облач ные провайдеры позволяют создавать виртуал ьн ые сети с настраиваем ы м и то­
пологиям и , которые изоли руют ваш и систе м ы друг от друга и от И нтернета. На плат­
формах, которые предлагают эту фун кцию, вы можете установить диапазоны адресов ва48 настоящее вре мя вы должны создать свой собствен н ы й образ Free BSD, если используете Google
Compute Eпgine.
глава 9. Облачные вычисления
309
ших сете й , оnределить nодсети , настроить маршруты , установить nравила брандмауэра
и nостроить VPN для nодкл ючения к внеш ним сетя м . С сетью и эксnлуатацией более
круnных и более сложных облачных nриложений связаны оnределен н ые издержки.
Ш Дополнительную информацию о сети VPN см . в разделе 27.9.
Вы можете сделать ваш и серверы достуnн ы м и в И нтернете nутем аренды nублично
маршрутизируе м ы х адресов от вашего nровайдера. У всех nоставщи ков есть большой
пул таких адресов, из которых nол ьзователи могут выбирать. В качестве альтернативы
серверам может быть предоставлен тол ько частн ы й адрес RFC 1 9 1 8 в адресном про­
странстве , выбранном м я вашей сети, что делает их общедоступн ы м и .
Ш Дополн ительную и нформ ацию о частн ых адресах R FC 1 9 1 8 см. в разделе 1 3 .4.
Систе м ы без общедоступ н ы х адресов напрям ую не доступн ы и з И нтерн ета, даже
для администраторов. Вы можете nолуч ить достуn к таким узлам через сервер nерехода
или хост-бастион , которы й открыт для И нтернета, или через сеть VPN , которая под­
ключается к вашей облачной сети . Для безопасности лучше, чтобы внешняя зона вашей
виртуальной и м перии была как можно меньше.
Хотя все это звучит м ногообещающе , у вас меньше возможносте й управлять вирту­
альными сетя м и , чем традицион н ы м и , и вы должн ы подчи н яться прихотям и капризам
набора функций, предоставленных ваш им выбранн ы м nровайдером . Это особе нно раз­
дражает, когда новая функция не может взаимодействовать с вашей частной сетью. ( М ы
смотри м на тебя , Amazon!)
Для n ол уч е н и я nодробной и н формации о сети TC P/ I P в облаке nерейдите в раз­
дел 1 3 . 1 5 .
Х ранили ще
Важной частью облачн ы х вычисле н и й я вляется хранение данн ых. Облачн ы е про­
вайдеры и меют самые большие и самые современ н ые систем ы хранения данных на пла­
нете, поэтому вам будет трудно обеспечить их объем и возможности в частном центре
обработки данных. Поставщики облачных вычислений взимают nлату с объема дан ных,
которые вы храните. О н и оче н ь моти вированы , чтобы дать вам как можно больше воз­
можностей мя хране н ия ваш их данных.5
Перечисл и м нескол ько н аиболее важн ых сnособов хранения данн ых в облаке .
•
•
Объектн ые хранил и ща содержат коллекции дискретных объектов (no существу,
файлов) в nлоском простра нстве и м е н . Объектные хранилища могут в м е щать
nрактически н еограничен н ы й объем данных с исключительно высокой надежно­
стью , но отн ос ител ьно н изкой производительностью. Они предназнач е н ы в ос ­
новном д11 я чтения. Файл ы в хран илище объектов доступны через сеть с помощью
протокола Н ТТР S. П римеры - AWS SЗ и Google Cloud Storage .
Блоч н ы е устройства хранения - это в иртуал изирова н н ы е жестки е диски. О н и
могут быть настроен ы по вашему выбору и nодкл ючен ы к виртуальному серверу,
nодобно томам SAN в традиционной сети. В ы можете перемещать тома между уз­
лами и настраивать свои п рофили ввода-вывода. П римеры - AWS EBS и Google
Cloud Storage.
5 Н а пример, компания AWS п редлагает посетить ваш у орган изацию н а м а ш и н е AWS S nowmoblle,
представляющей собой транспортный контейнер дли ной 45 футов, который буксируется грузовым
тягачом и способен перевести 1 00 П и Б из вашего дата-центра в облако.
Часть 1. Основы администрирования
31 0
•
Эфемерное хра н ил ище - это локал ьное дисковое простра н ство на виртуал ь­
ном частном сервере (Virtual Private Server - VPS). создан ное на основе дисков
на главном сервере. Они обычно бывают быстр ы м и и е м ки м и , но при удал е н и и
VP S дан н ы е теря ются, поэтому эфемерное хра н ил и ще луч ш е всего испол ьзовать
для временных файлов. П ри м еры - тома хра н ил и ща экзе м пляров на AWS и ло­
кальные SSD на G C P.
В дополнение к эти м службам хранения данных облачные провайдеры обычно пред­
лагают множество бесплатных служб баз дан н ы х , которые вы можете получить через
сеть. Реляционн ые базы данных, такие как MySQ L, PostgreS Q L и O racle, выпол ня ются
как службы AWS Relational Database Service. Они предлагают встроен ную мул ьтизон ную
избыточность и ш ифрование дан н ых при хранении.
Расп редел е н н ы е анал ит и ч е с к и е базы дан н ых . та кие как AWS Redshift и G C P
BigQuery, предлагают н евероятную рентабельность ин вестиций; обе эти базы заслужива­
ют в н имательного изучения, прежде ч е м строить собственное дорогостоя щее хранил и ­
щ е . П оставщики облаков также предлагают обычн ы й ассортимент баз дан н ых в опера­
тивной памяти и NoSQL, таких как Redis и memcached.
Идентификация и авторизация
Адм и н истраторам , разработч и кам и другим техническим сотрудн и кам н еобходимо
управлять облач н ы м и служба м и . В идеал ьном случае средства управл е н и я доступом
должн ы соответствовать принципу наименьших привилеги й : кажд ы й директор может
иметь доступ тол ько к объектам , которые и м е ют к нему отноше н и е , и не более того.
В зависи мости от контекста такие спецификации контроля доступа могут стать довол ь­
но сложным и .
Ком пан ия AWS искл юч ител ьно с ил ьна в этой области . Е е служба под н азванием
l dentity and Access M anagement ( IAM) определяет не тол ько пол ьзователе й и груп п ы ,
н о и роли дл я систем . Например, серверу могут б ы т ь назнач е н ы пол итик и , позволяю­
щие его программ ному обеспечению запус кать и останами вать другие серверы, хран ить
и извлекать дан н ы е в хра н илище объектов или взаимодействовать с очередям и - все
с автоматической ротацией ключей. Служба IAM также и меет и нтерфейс прикладного
программирования для управления кл ючами , который поможет вам безопасно хранить
секреты.
Другие облач н ы е п л атфор м ы и м е ют м е н ьш е возможносте й автор и за ц и и .
Н еуди вительно, что служба Azure основана н а службе Active Directory M icrosoft . Она хо­
рошо сочетается с сайта м и , для которых существует интегрирован н ы й каталог. Служба
контрол я доступа G oogl e , также назы ваемая IA M , относ ител ьно грубая и н е пол ная
по сравнению со службой компан ии Amazon.
А втоматизация
И нструменты A P I и C L I , созданные поставщика м и облачных технологи й . я вля ют­
ся основны м и строительн ы м и блоками пользовател ьс кой автоматизации. но они часто
неукл южи и непрактич н ы для организации бол ьш и х коллекций ресурсов. Например,
что делать, есл и вам нужно создать новую сеть, запустить нескол ько экзе м пл яров VPS,
предоставить базу дан н ы х , настроить брандмауэр и, наконец, подключ ить все эти ком ­
поненты'? С точки зрен ия облач ного API это бьш бы сложны й сценар и й .
AWS CloudFormation стала первой службой дл я решения этой проблемы. О на принимает
шаблон в формате J SON или YAM L, который описывает требуемые ресурсы и связан ные
Глава 9. Облачные вычисления
31 1
с ними детали конфиrураuии. Вы отпрамяете шаблон в службу CloudFormation, которы й
проверяет его на наличие ош ибок, сортирует зависимости между ресурсами и создает или
обновляет конфиrураuию облака в соответствии с вашими спецификациям и .
Шаблоны Clou d Formation ямяются мощ н ы м и , но подверже н ы ош ибкам в челове ­
ческих руках из-за строгих требован и й с интаксиса. П ол н ы й ш аблон я вляется невыно­
симо многословн ы м , и л юдям сложно даже ч итать е го. Вместо того , чтобы п исать эти
шаблон ы вручную, мы предпоч итаем автоматически генерировать их с п омощью биб,ш ­
отеки Python под названием Troposphe re от Марка П ика ( Mark Peek) (см. G i t h ub . com/
cloudtoo l s / t ropo s p h e r e ) .
Третья сторонняя служба также нацелена на эту проблему. Служба Terraform с от­
крыты м исходн ы м кодом ком па н и и HashiCorp , я вляется средством для построе н ия
и изме нения инфраструктуры независимо от особенностей облака.
Как и в службе Clou d Formation , вы описываете ресурсы в настраиваемом ш аблоне,
а затем позволяете службе Terraform создавать правил ьн ые вызовы API для реал иза ц и и
вашей конфи rурации .
Затем вы можете проверить с вой конфигурацион н ы й файл на управление версиJ1 ми
и управлять инфраструктурой с течен ием времени.
9.4. ОБЛАКА: БЫСТРЫЙ ЗАПУСК VPS НА ПЛАТФОРМЕ
Облако - отличная песоч ница, в которой можно изучить системы UN IX и Linux. Эrот
короткий раздел поможет вам и нсталлировать и запускать виртуальные серверы на AWS ,
GCP ил и Digita\Ocean . В качестве с истемных адми н истраторов м ы акти вно испол ьзуем
командную строку (в отличие от веб-графических интерфейсов) для взаимодействия с об­
лаком , поэтому иллюстрируем здесь использование именно этих инструментов.
Веб -службы Amazon
Для того чтобы использовать AWS , сначала настройте учетную запись н а сайте a w s .
ama z o n . c om. Создав учетную зап ись, немедленно следуйте инструкциям AWS Trusted
Advisor, чтобы настроить свою учетную запись в соответствии с предлагаемыми рекоменда­
циями . Затем вы можете перейти к отдельным консолям обслуживания для ЕС2, VPC и т.д.
Каждая служба AWS и м еет с п е ц и ал ь н ы й пол ьзовательск и й и нтерфе й с . Когда вы
войдете в веб-консоль, вы увидите вверху с писок служб. Внутри Amazon каждая служ­
ба управляется независимой командо й , и, к сожал е н и ю , дан н ы й и нтерфейс отражает
этот факт. Хотя это решение помогло развивать АWS-службы , это приводит к нескол ь­
ко фрагментирован ному оп ыту взаимодействия. Не которые и нтерфейсы более удобн ы
и интуитивн ы , ч е м другие .
Для того чтобы защитить свою учетную зап ись, вкл юч ите м ногофакторную ауте нти­
фикацию ( M FA) для пользователя root , а затем создайте привилегированного пользова­
теля \АМ для повседневного испол ьзования. Мы также обычно настраи ваем псевдон и м ,
чтобы пользовател и могли получ ить доступ к веб-консол и без ввода номера учетной за­
писи. Эта опция находится на начал ьной стран ице службы IAM .
В следующем разделе м ы представляем официальный инструмент aws - интерфейс
командной строки , написан н ы й на Python. Новые пользователи также могут воспол ьзо­
ваться службой быстрого запуска Amazon Lightsail , целью которой ямяется запуск эк­
земпляра ЕС2 с м и н имальн ы м и усил иями.
Часть 1. Основы администрирования
31 2
И нтерфейс aws: уп равление подсистемами AWS
П рограмма aws - это ун ифи цированн ы й интерфейс командной строки для служб
AWS . Он управляет экзем плярами , сохраняет резервные копи и , редактирует записи D N S
и выполняет большинство других задач, отображаемых в веб-консол и . И нструме нт ос­
нован на замечател ьной библ иотеке Boto, S D K Python для AWS API и работает в л юбой
системе с действующим интерпретатором Python.
Установите этот инструмент с помощью команды pip:
$ pip install awscli
Для того чтобы испол ьзовать aws , с начала выпол ните аутентифи кац и ю в интерфей ­
се прикладного програ м мирования AWS , используя пару случай н ых строк, называемых
идентификатором ключа доступа и секретным ключом доступа . Создайте эти учетные
дан ные в веб-консоли IAM , а затем скопируйте и вставьте их на м естном уровне.
При выпол н е н и и команды aws confiqure вам будет предложено установить учет­
ные данные A P I и регион по умолчанию:
$ aws confiqure
AWS Acce s s К е у I D : AКIAIOSFODNN7EXAМPLE
AWS S e c r e t Acc e s s К е у : wJalrXUtnFEМI/ K7МDENG/bPxRfiCYEXAМPLEКEY
D e f a u l t r e g i on n arne [ u s - e a s t - 1 ] : <re t u rn>
De f a u l t o u t p u t f o rrnat [ N one ] : <re t urn>
Эти настройки сохраня ются в файле - / . aw s / config. П ока вы настраиваете среду,
м ы также рекоме ндуем вам настроить фун кцию автозаполнения оболоч ки bash, чтобы
легче было обнаружить подкоманды . Допол н ительная и нформация представлена в до­
кументах AWS C L I .
Первый аргумент команды aws называет кон кретную службу, которой в ы хотите мани­
пул ировать; например, ес2 Дll Я действий, которые управляют веб-службой Elastic Compute
Cloud. Вы можете добавить подсказку по ключевым словам в конце любой команды, что­
бы увидеть инструкции. Так, aws help, aws ес2 help и aws ес2 descriЬe- instance
help помогают создавать полезные справочные страницы.
Создани е э кзем пляра ЕС2
m Дополн ительную и нформаци ю о команде pip см. в разделе 7 . 6 .
Для создан и я и зап ус ка экзе м пляро в ЕС2 ис пол ьзуйте команду a w s е с 2 run­
instances. Хотя вы можете создавать нескол ько экзе м пляров с помощью одной коман­
ды ( испол ьзуя параметр - - count ), экзе м пляры должн ы иметь общую конфи гурацию.
Вот м и н имал ьн ы й пример полной команды:
$ aws е с 2 run- ins tances - - imaqe-id ami -d4 4 0 aбe7
- - ins tance - type t2 . nano - - associate-puЫic-ip-address
- -key-name admin-key
# в ыв о д см . ниже
В этом примере указаны следующие дан ные конфигурации.
•
•
Образ базовой системы представляет собой версию CentOS 7 , выпущенную Amazon,
с именем ami - d 4 4 0 a бe 7 . (AWS называет эти образы AM I - Amazon Machine I mages. )
Как и другие объекты AWS , имена образов, к сожал е н и ю , не мнемоническ и е ; вы
должны искать идентификаторы в веб- консол и ЕС2 или в командной строке (aws
ес2 describe- images) Дll Я их декодирования.
Глава 9. Облачные вычисления
•
•
31 3
Тип экзем пляра
t 2 . n a n o , которы й в настоящее врем я является наименьшим
типом э кзем пляра. Он и меет одно ядро центрального процессора и 5 1 2 Мбайт
оперативной памят и . С веде н и я о доступн ы х типах экзе м пляров можно найти
в веб-консоли ЕС2 .
-
Для управления доступом SSH также назначается предварительно сконфиrуриро­
ван ная пара ключе й . В ы можете создать пару кл юч е й с помощью команды s sh­
keygen (см . раздел 2 7 . 7 ) , а затем загрузить открытый кл юч в кон соль AWS ЕС2.
Результат работы команды aws ес2 run-instance показан ниже. Эrо формат JSON ,
поэтому он легко распознается другим программ н ы м обеспечением. Например, после за­
пуска экземпляра сценарий может извлекать I Р-адрес экземпляра и настраивать DNS, об­
новлять систему инвентаризации или координ ировать запуск нескольких серверов.
$ aws ес2 run- ins tances . . . # Те же кома нды , что и выше
{
" Owne r l d " : " 1 8 8 2 3 8 0 0 0 0 0 0 " ,
" Re s e rv a t i on l d " : " r - 8 3 a 0 2 3 4 6 " ,
" I n s t an c e s " : [
" P r i va t e i pAdd r e s s " : " 1 0 . 0 . 0 . 2 7 " ,
" I n s t a n ce l d " : " i - c 4 f 6 0 3 0 3 " ,
" I ma ge l d " : " ami - d 4 4 0 a б e 7 " ,
" P r iva t e Dn
s N ame " : " ip - 1 0 - 0 - 0 - 2 7 . u s - we s t - 2 . c ompu t e . i n t e rn a l " ,
" K e yName " :
" a dmi n - ke y " ,
" S e c u r i t yG r o up s " : [
{
" G roupName " : " d e f a ul t " ,
" G roup l d " : " s g- 9 e b 4 7 7 fb "
] ,
" Subne t l d " : " s ub ne t - e f 6 7 9 3 8 a " ,
" I n s t a n c e T ype " : " t 2 . na no " ,
По умолчани ю экзем пляры ЕС2 в подсетях УРС н е и меют подключе н н ых общедо­
ступных I Р-адресов, что делает их доступными только из других с истем в пределах одно­
го УРС. Чтобы использовать экзе м пляры непосредственно из Интернета , задействуйте
параметр --associate-puЫic-ip-address, как показано в нашем примере . В ы може­
те узнать назнач е н н ы й l Р-адрес постфактум с помощью команды aws ес2 des cribe­
ins tances или путем поиска экземпляра в веб-консол и .
Брандмауэры в ЕС2 называются группами безопасн ости. Поскольку м ы не указали
здесь группу безопасности, AWS принимает группу d e f a u l t , которая не дает доступа.
Чтобы подключиться к экзем пляру, настройте группу безопасности , чтобы разр е ш ить
выполнение ал горитма SSH с ваш е го I Р-адреса. В сценариях реального мира структура
группы безопасности должна быть тщател ьно сплан ирована во врем я проектирования
сети. Мы обсуждаем группы безопасности в разделе 1 3. 1 5 .
Команда aws configure устанавливает область по умолчанию, поэтому вам не нуж­
но указывать регион для экзем пляра, если вы не хотите задать что-то , отличное от зна­
чения , п р и нятого по умолчанию. AM I , п ара ключей и подсеть относятся к региону,
и интерфейс aws жалуется , если их нет в указанном вами регионе . ( В этом кон кретном
случае A M I , пара ключей и подсеть находятся в регионе u s - e a s t - 1 . )
Часть 1. Основы администрирования
31 4
Обратите внимание на поле I n s t a n c e l d в с п иске резул ьтатов , которое я вляется
ун и кал ьн ы м идентифи катором для нового экзем пляра. Команда aw s ес2 describe ­
ins tance -instance-id id выводит подробную информацию о существующем экзем­
пляре, а команда aws е с 2 de sc ribe - i n stan ce s - обо всех экземплярах в регионе.
Когда экзе м пляр запуще н и группа безопасности по умолчанию настрое на для пере­
дач и трафи ка по ТС Р-порту 22, вы можете ис пол ьзовать ал горитм S S H для входа в си­
стему. Большинство AM I настроены с учетной записью nonroot с привилегиям и sudo.
Для с исте м ы Ubuntu и м я п ол ьзователя - u b u n t u ; дл я CentOS - c e n t o s . Free B S D
и Amazon Linux испол ьзуют и м я e c 2 - u s e r . В документации дл я выбранного вам и A M I
должно быть указано и м я пол ьзователя, если оно н е я вляется одн им и з них.
П равильно настрое н н ы е образы позволя ют использовать тол ько открытые кл ючи
для аутентификации S S H , а не пароли. После того как вы вошли в систему с се кретным
кл ючом S S H , у вас будет пол н ы й доступ к sudo без н еобходимости пароля. Мы реко­
ме ндуем откл юч ить пол ьзовател я по умолчан ию после первой загрузки и создать лич­
ные учетн ые записи
.
Просмотр журнала консоли
Отладка н изкоуровневых проблем , таких как проблемы при запуске и ошибки диска,
может быть сложной задаче й без доступа к консоли экземпляра. И нтерфе йс ЕС2 позво­
ляет получ ить вывод консол и экземпляра, который может быть полезен , если экземпляр
находится в состоян и и ош ибки ил и , по-видимому, зависает. Вы можете сделать это че­
рез веб- и нтерфейс ил и с помощью команды aws ес2 get-console-output, как пока­
зано ниже .
$ aws ес2 qet- console- output - - ins tance-id i - c 4 f 6 0 3 0 3
{
" I n s t anc e l d " : " i - c 4 f 6 0 3 0 3 " ,
" T ime s t amp " : " 2 0 1 5 - 1 2 - 2 1 T 0 0 : 0 1 : 4 5 . 0 0 0 Z " ,
" Output " : " [ 0 . 0 0 0 0 0 0 ] I n i t i a l i z i ng c g r oup s ub s y s cpu s e t \ r \ n [
0 . 0 0 0 0 0 0 ] I n i t i a l i z i ng cg roup s ub s y s cpu \ r \ n [ 0 . 0 0 0 0 0 0 ]
I n i t i a l i z i ng c g r o up s u b s y s c p u a c c t \ r \ n [ 0 . 0 0 0 0 0 0 ] L i n u x ve r s i on
4 . 1 . 7 - 1 5 . 2 3 . am z n l . x 8 6_ 6 4 ( mo c kbu i l d @ gob i - b u i l d - 6 0 0 0 6 )
( gc c ve r s i on 4 . 8 . З 2 0 1 4 0 9 1 1 ( Red H a t 4 . 8 . 3 - 9 ) ) # 1 SMP Mon S e p
1 4 2 3 : 2 0 : 3 3 UTC 2 0 1 5 \ r \ n
W Дополнительную и нформацию о б управлении пользователями с м . в главе 8 .
П ол н ы й жур н ал , коне ч н о , нам ного дольше, ч е м этот фрагмент. В дам пе J SON со­
держимое журнала, к сожален ию склеивается в одну строку. Для луч шей ч итаемости от­
форматируйте его с помощью команды sed.
,
$ aws ес2 qet- console- output - - ins tance-id i - c 4 f 6 0 3 0 3 1 sed
' s / \ \ r\ \ n/ \ \n/q '
" I n s t anc e i d " : " i - c 4 f 6 0 3 0 3 " ,
" T ime s t amp " : " 2 0 1 5 - 1 2 - 2 1 T 0 0 : 0 1 : 4 5 . 0 0 0 Z " ,
" Output " : " [ 0 . 0 0 0 0 0 0 ] I n i t i a l i z i n g c g r oup s ub s y s cpu s e t
[ 0 . 0 0 0 0 0 0 ] I n i t i a l i z i n g c g r oup s ub s y s cpu
[ 0 . 0 0 0 0 0 0 ) I n i t i a l i z i n g c g r oup s ub s y s cpua c c t
[ 0 . 0 0 0 0 0 0 ) L i n u x ve r s i on 4 . l . 7 - 1 5 . 2 3 . am z n l . x 8 6_ 6 4
( mo c kbu i l d @ gob i - bu i l d - 6 0 0 0 6 ) ( g cc ve r s i on 4 . 8 . З 2 0 1 4 0 9 1 1
Глава 9. Облачные вычисления
( Red H a t 4 . 8 . 3 - 9 ) )
31 5
# 1 SMP Mon S e p 1 4 2 3 : 2 0 : 3 3 UTC 2 0 1 5
Эта запись журнала поступает непосредственно и з процесса загрузк и Linux. В приве­
денном выше примере показано несколько строк с момента и н ициализации экзем пляра.
В больши нстве случаев вы найдете самую и нтересную информацию в конце журнала.
Остановка и завер ше ние ра боты э кземпляров
Когда вы законч ите работать с экзе м пляром , вы можете остановить (stop) его, чтобы
закрыть экзе м пляр, но сохранить его для последующего испол ьзования, или завершить
(terminate) е го, чтобы полностью удалить э кзе м пляр. По умолчанию завершение также
полностью освобождает корневой диск экземпляра. После прекращен и я работы экзем­
пляр не может быть восстановлен даже с помощью AWS.
$ aws ес2 s top- ins tances - - ins tance - id i - c4 f 6 0 3 0 3
{
" S t opp i n g i n s t ance s " :
{
" I n s tance i d " : " i - c 4 f 6 0 3 0 3 " ,
" C u r r en t S t a t e " : {
" Code " : 6 4 ,
" N ame " : " s t opp i n g "
),
" P re v i o u s S t a t e " : {
" C ode " : 1 6 ,
" N ame " : " runn i n g "
Обратите внимание на то, что виртуал ьные м аш и н ы н е меняют состоян ие мгновен­
но; им требуется перезагрузка. Следовательно, суmествуют переходны е состоян и я , такие
как начало (starting) и остановка (stopping) . Обязательно учитывайте их в любых сцена­
риях, которые вы можете написать.
Goog le Cloud Platform
Для того чтобы начать работу с платформой GCP, создайте учетную зап ись на сайте
c l oud . goog l e . com. Если у вас уже есть идентификатор Google , вы можете зарегистри­
роваться в той же учетной записи.
Службы G C P работают в разделе , известном как проект . В каждом проекте есть от­
дельные пользователи , данные о счетах и учетные данные API , поэтому вы можете до­
стичь пол ного разделения между разрозненн ы м и приложе н и я м и или областям и бизне­
са. Создав с вою учетную запись, создайте проект и включите отдел ьные службы GCP
в соответствии с ваши м и потребностям и . G oogle Compute Engine, служба VPS , я вляется
одной из первых служб, которые вы, возможно, захотите включить.
Настройка gcloud
П ро грамма g c l oud, приложе н и е на языке Pytho n , я вляется и нструментом C LI
для G C P. Это ком понент Google Cloud S DK , которы й содержит м н ожество библ иотек
и и нструментов для взаимодействия с G C P. Чтобы установить его, следуйте инструкци­
я м по установке на сайте c l oud . goog l e . com/ s d k.
31 6
Часть 1. Основы администрирования
П ервое действие должно состоять в том , чтобы настроить среду, выпол н и в команду
gcloud ini t. Эта команда запускает небольшой локал ьн ы й веб-сервер, а затем откр ы ­
вает ссыл ку браузера для отображен и я пользовательского и нтерфейса Google для аутен ­
тификации . П осле аутентификации через веб-браузер gcloud попросит вас ( в оболоч ­
ке) в ыбрать профиль проекта, зону по умолчан и ю и другие знач е н ия по умолчан и ю .
Настройки сохраняются в файле � / . config/gcloud / .
Выполн ите команду gcloud help для получения общей и нформации или gcloud - h
для краткого описания использования. Также доступна помощь п о подкоманде; например,
команда gcloud help compute показывает справочную страни цу для службы Compute
Engine.
Запуск э кзем пляра на GCE
В отличие от команд aw s , которые немедленно возвращают управл е н и е , команда
gcloud compute работает синхронно. Н апример, когда вы выполняете команду create
для запроса нового экземпляра, команда gcloud делает необходимый вызов A P I , а затем
ждет, пока экземпляр не будет настроен и запущен , а затем возвращает его. Это соглаше­
ние позволяет избежать необходимости опроса состояния экземпляра после его создания. 6
Для того чтобы создать экзе м пляр, сначала определите имя ил и псевдон и м образа,
которое вы хотите загрузить:
$ gcloud compute images l i s t - - regexp ' debian . * '
AL I AS
NАМЕ
P ROJECT
d eЬ i a n - 7 - wh e e z y- v2 0 1 6 0 1 1 9
deЬi a n - c l oud
deЬ i a n - 7
d e Ь i a n - 8 - j e s s i e - v2 0 1 6 0 1 1 9
deЫ a n - c l oud
deЬian- 8
D E P RECAT E D S TATU S
READY
READY
Затем создайте и загрузите экземпляр, указав его имя и образ.
$ gcloud compute ins tances create ulsah - - image dehian-8
# ожид а е т э к з емпл яра для запуска . . .
NАМЕ
Z ONE
МAC H I N E Т У Р Е
I NT E RNAL I P EXT E RNAL I P
u l s a h u s -central l - f n l - s tandard- 1
10 . 100 . 0 . 4
1 0 4 . 1 97 . 65 . 2 1 8
STATUS
RUNN I N G
Обыч но результаты работы этой ком анды содержит столбец, которы й показывает,
я вляется л и экзе м пляр вытесняемым , но в этом случае он был пустым , и м ы удалил и
е го, чтобы уместить в ывод на странице. В ытесняемые экзе м пляры м е н ее дороги , чем
стандартные э кзем пляр ы , но о н и могут работать только 24 часа и их работа может быть
прекращена в л юбое вре м я , если Google нуждается в ресурсах дл я другой цел и . О н и
предназнач е н ы для долговрем е н н ых операций , которые могут допускать перерывы, на­
пример задания пакетной обработки .
В ытесняемые экзе м пляры а налогичн ы спот-экзем плярам ЕС2 в том с м ысле , что вы
платите дисконтированную ставку за остальную резервную е м кость. Тем не менее м ы
обнаружили , что вытесняемые экземпляры Google более разум н ы и проще в управле­
н и и , чем спот-экземпляры AWS. Однако долговреме н н ые стандартные экзе м пляры оста­
ются наиболее подходящ и м выбором для большинства задач.
П рограмм а gcloud и н и циализирует экзе м пляр публ и ч н ы м и частн ы м I Р-адресом .
Вы можете испол ьзовать публ и ч н ы й I Р-адрес с ал горитмом S S H , но программа gcloud
имеет полезную оболочку для упрощения входа в систему S S H :
$ gcloud compute s sh ulsah
L a s t l o gi n : Mon Jan 2 5 0 3 : 3 3 : 4 8 2 0 1 6
u l s ah : - $
6 Выполните команду aws ес2 wai t для получения и нформации об опросе событий или состоян и й
в AWS ЕС2.
глава 9. Облачные вычисления
31 7
DigitalOcea n
С объя вл е н н ы м временем загрузки 55 с виртуальн ые серверы D igitalOcean (дропле­
ты) - это сам ы й быстрый путь к корневой оболочке . Стоимость начального уровня со­
ставляет 5 долл. США в месяц , поэтому они также н е разорят вас.
m Дополнительную и нформаци ю о настрой ке "драгоценных кам ней" Ruby см. в разделе 7.6.
После создания учетной записи в ы можете управлять своим и дроплетами через веб­
сайт DigitalOcean. Тем н е менее нам удобнее прим е н ять буксир, и нструмент ком анд­
ной строки, написанн ы й н а я з ы ке Ruby, которы й испол ьзует опубл и кован н ы й API
DigitalOcean. Предположим, что у вас есть Ruby и е го менеджер библиотеки, gem, уста­
новленн ы й в локал ьной системе. Для и нсталляц ии программ ы tugboat просто выпол­
ните команду gem install tugboat.
Необходимо выполнить несколько этапов настройки. Сначала создайте пару крипто­
графических ключей , которые вы можете испол ьзовать для контроля доступа к дроплетам .
$ s sh-keygen - t rsa -Ь 2 0 4 8 -f / s sh/id rs a do
Gene r a t i n g puЫ i c /p ri v a t e r s a k e y p a i r .
Ent e r pa s s p h r a s e ( emp t y f o r n o p a s s p h r a s e ) : <re t urn>
Ent e r s ame p a s s p h r a s e a g a i n : <re t u rn>
Your i d e n t i f i c a t i on h a s b e e n s aved i n / U s e r s /be n / . s s h / i d_ r s a_do .
Your puЫ i c k e y h a s b e e n s aved in / U s e r s / b e n / . s s h / i d_ r s a_do . pub .
"
.
_
_
Скопируйте содержи мое файла откры того кл юча и вставьте е го в веб- консоль
DigitalOcean ( в настоящее врем я в разделе Setti n g � Secu rity) . В рамках этого процесса
назначьте короткое имя открытому ключу.
Затем подключ ите программу tugboat API D igitalOcean, введя токен доступа, кото­
рый вы получите с веб-сайта. П рограмма tugboat сохраняет токен для будущего ис­
пользования в файле " / . tugboat.
W Допол нительную и нформацию об ал горитме SSH см. в разделе 22.7.
$ tugboat authorize
Note : You can get your Acce s s T o ke n f r om h t tp s : / / c l ou d . di g i t a l o c e a n . c om/
s e t t i n g s / t o ke n s / n e w
Ent e r y o u r a c c e s s t o k e n : e 9dffla9a7 ffdd8faf3". f3 7b0 1 5b3d4 5 9 c 2 7 95bб4
Ent e r your SSH key path ( de fa u l t s t o - / . s s h / i d_ r s a ) : " / . s sh/ id_rsa_do
Ent e r you r S S H u s e r ( op t i o n a l , de f a u l t s t o roo t ) :
Ent e r y o u r S S H p o r t numЬ e r ( op t i ona l , de f au l t s t o 2 2 ) :
Ent e r y o u r de f a u l t r e g i o n ( op t i ona l , de f a u l t s to n y c l ) : sfol
Aut h e nt i ca t i o n w i t h D i g i t a l Oc e a n wa s s u c ce s s f u l .
Чтобы создать и запустить дроплеты, с начала укажите имя образа систе м ы , которы й
в ы хотите использовать в качестве базовой. Например, так.
$ tugboat iшages 1 grep - i uЬuntu
16 . 04 . 1
16 . 04 . 1
16 . 04 . 2
16 . 04 . 2
х64
х64
х64
х32
( s l u g : , i d : 2 1 6 6 9 2 0 5 , di s t r o : Ubunt u )
( s l u g : , i d : 2 2 6 0 1 3 6 8 , di s t r o : Ubun t u )
( s l u g : ubun t u - 1 6 - 0 4 - x 6 4 , i d : 2 3 7 5 4 4 2 0 , di s t r o : Ubun t u )
( s l u g : ubun t u - 1 6 - 0 4 - x 3 2 , i d : 2 3 7 5 4 4 4 1 , di s t r o : Ubu n t u )
Вам также нужен цифровой идентификатор DigitalOcean для ключа S S H , вставлен­
ного в веб- консоль.
Часть 1. основы администрирования
31 8
$ tuqboat keys
SSH Keys :
N ame : i d_ r s a_do , ( i d : 1 5 8 7 3 6 7 ) , f i ng e r p r i n t :
b c : 3 2 : 3 f : 4 d : 7 d : b 0 : 3 4 : ac : 2 e : 3 f : O l : f l : e l : e a : 2 e : da
Этот вывод показывает, что ч исловой идентификатор для ключа с именем i d- r s a_
d o равен 1 58 7 367. Создайте и запустите дроплеты следующим образом:
$ tuqboat create - i uЬuntu - 1 6 - 0 4 -x64 -k 1 5 8 7 3 67 ulsah-uЬuntu
queue i n g c r e a t i on o f d r o p l e t ' ul s a h-ubun t u ' . . . D r op l e t c r e a t e d !
Здесь аргумент -k
это идентификатор ключа S S H , а последни й аргумент - корот­
кое и м я для дроплета, которое вы можете назначить по своему усмотрению.
Как только дроплет загрузится , вы м ожете войти в систему с помощью команды
tugboat ssh.
-
$ tuqboat ssh ulsah-uЬuntu
D r op l e t f u z z y name p rovi de d . F i n d i n g d r op l e t I D . . . don e , 2 3 7 5 4 4 2 0
( ub u n t u - 1 6 - 0 4 -x 6 4 )
E x e c u t i n g S S H on D r op l e t ( ub u n t u - 1 6 - 0 4 - x 6 4 ) . . .
T h i s d r op l e t h a s а p r iva t e I P , c h e c k i n g i f you a s ke d t o u s e t h e P r i v a t e I P . . .
You d i dn ' t ! U s i n g puЫ i c I P f o r s s h . . .
A t t emp t i n g S S H : r o ot @ 4 5 . 5 5 . l . 1 6 5
W e l c ome to Ubun t u 1 6 . 0 4 ( ( GN U / L i nu x 4 . 4 . 0 - 2 8 - ge n e r i c х 8 6_ 6 4 )
r o o t @ u l s a h - ub u n t u : - #
В ы можете создать столько дроплетов, сколько вам нужно, но имейте в виду, что вам
будет выставлен счет за каждый из н их, даже если он выключен . Чтобы отключить дроплет,
выполните команду tugboat snapshot имя -дропле та имя - снимка , чтобы сделать сни­
мок памяти систе м ы, и команду tugЬoat destroy имя-дроплета, чтобы отключить дро­
плет. Позднее вы можете воссо:щать дроплет, используя снимок в качестве исходного образа.
9.5. КОНТРОЛЬ ЗАТРАТ
Новички в облач н ых вычислениях часто наивно предполагают, что крупномасштабные
систе м ы будут значительно дешевле работать в облаке, чем в дата- центре. Это ожидан ие
может быть с вязано с превратной интерпретацией низкой стоимости ч аса работы с экзем­
пляром на облачной платформе. Кроме тоrо, возможно, пользователи поддаются уговорам
облачн ы х маркетологов, чьи тематические исследования всегда показывают огромную
экономию.
Независимо от их источн и ка, мы обяза н ы отбросить надеж:ды и оптимизм. По наше­
му опыту, новые пользователи облачных вычислен и й часто уди вляются, когда затраты
быстро растут.
Тарифы облака обычно состоят из нескольких ком понентов.
•
•
•
В ы числительные ресурсы виртуальных ч астны х серверов, балансировщиков на­
грузки и всеrо остального, которые потребляют циклы процессора для запус ка ва­
ш их служб. Цена взимается за час использования .
Передача данных в И нтернете ( как входящая , так и исходящая ) , а также трафик
меж:ду зонами и регионами. Цены взимаются за двоич н ые гига- ил и терабайты.
Хран ил и ща всех типов: блочн ые тома хране н и я , объе ктные хран ил и ща , моме н ­
тал ьн ые с н и м ки диска, а в не которых случаях и операции ввода- в ывода в раз­
л и ч н ы х постоя н н ых хранили щах. Взимается цена за каж:дый двоич н ы й гига- или
терабайт в месяц.
Глава 9. Облачные вычисления
31 9
Для вычислительн ых ресурсов наиболее дорогостоя ще й я вляется модель " плати или
иди" , также известная как " ценообразование по требованию". У AWS и DigitalOcean мини­
мальный и нтервал биллинrа составляет один час, а на GCP
м и нута. Цен ы варьируются
от долей процента в час (самый маленький тип дроплета DigitalOcean с 5 1 2 Мбайт и одним
ЯдРОМ процессора или экземплярами AWS t 2 . nano) до нескольких долларов в час (экзем­
пляр i 2 . 8 x l a rge в AWS с 32 ядрами , ОЗУ 1 04 ГиБ и 8 х 800 Г5 локальных SSD).
Вы можете добиться существе н ной экономии н а в и ртуал ь н ы х серверах , заплатив
авансом за более длительные сроки. В компании AWS это называется " ценой зарезерви­
рованных экзем пляров " . К сожалению, чтобы точно определ ить, что покупать, необхо­
димо выпол н ить очень тяжелую и дл ительную работу.
Зарезервирован ные экзе м пляры ЕС2 привязаны к опр еделе н н ом у семейству экзе м ­
пляров. Если позже вы решите , что в а м н ужно что-то другое , в а ш и и н вести ц и и будут
потеряны . С другой стороны , если вы зарезервируете экзе м пл я р , вам гарантируется , что
он будет доступе н для вашего испол ьзования. С экзе м плярами по запросу желаем ы й
тип может быть недоступен даже при его установке , в за в иси мост и о т текуще й емкости
и спроса. AWS продолжает корректировать свою структуру ценообразова н и я , поэтом у,
к счастью, нынешняя система может быть упрощена в будущем .
Для рабочих нагрузок, которые допускают перерывы , AWS предл агае т точечное цено­
образование. Спот- рынок - это аукцион . Если ваша ставка п ре в ы ш ает текущую с пот­
цену, вам будет предоставл е н тип запраши ваемого вами экзе м пляра, пока цена не пре­
высит максимальную ставку, после чего работа вашего экзе м пляра будет прервана. Цен ы
могут быть значительно с н ижен ы п о сравнению с ЕС2 п о требованию и зарезервирован­
ным ценам , но варианты испол ьзования ограниче н ы .
Сравнить цен ы на Google Compute Engine достаточно п р ос то . П р и дл ительном и с ­
пол ьзовании автоматически применяются скидки , и в ы н икогда н е будете платить аван­
сом . Вы платите пол ную базовую цену за первую неделю месяца , а и н крем е н т н ая цена
падает каждую неделю на 20% от базовой ставки до макс и мальной скидки 60% . Ч истая
скидка на пол н ы й месяц ис пользования составляет 30% . Это примерно сопоставимо
с дисконтом на оди н год зарезервированного экзе м пл яра ЕС2 , но в ы можете изменять
экземпляры в л юбое время.7
Еще более сложно прогнозировать сетевой трафик. Факторы , к оторы е как правило,
вызывают высокие затраты на передачу данн ых, включают в себя следующее.
-
,
•
•
•
•
Веб-сайты , которые загружают и обслуживают бол ьшие м ул ьтимедийные файлы
(видео, образы , Р D F-файлы и другие крупные доку м е нты) н епоср едс т ве н н о из об­
лака, а не выгружают их в C D N .
Межзо н н ы й или межрегиональный трафик для кла стеров баз данных, которые ре­
плицируются для отказоустойчивости; например, программ ное обеспечение, такое
как Cassandra, MongoD B и Riak.
MapReduce ил и кластер хранилищ данн ых, которые охватывают несколько зон .
Образы дисков и с н и м к и томов, передаваем ы е между зона м и или регионами
для резервного копирования (или другим автом ат и ч ес к и м процессо м ) .
В ситуациях, когда репли кация между несколькими зонами важна для обеспечения
доступности, вы сэкономите на трансферных расходах , огра н и ч и в кл астеры до двух зон ,
7Совет для бережливых людей: поскольку схема скидок связана с ва шим билли нrовым циклом, время
переходов и меет значение. Вы можете переключать типы экземпляров в н ач ал е или в ко н це цикла
без штрафа. Н аихудш и й случай заключается в том , чтобы перекл ючаться на пол пуrи б илл и н говоrо
цикла. Эго переключение штрафуется примерно на 20% от меся чной базовой ставки экземпляра .
Часть 1. Основы администрирования
320
а н е испол ьзуя три ил и более. Н е которые программы предлагают такие настройки, как
сжатие , которое может умен ьш ить коли чество ре плицирован ных дан н ых.
Существен н ы м источ ником расходов на AWS я вляется количество операци й ввода­
вывода ( IO PS) Дll Я томов EBS ( Extemal B LO B Storage). Цены за использование EBS взима­
ются за кол ичество двоичных гигабайтов в месяц и за количество операций I OPS в месяц.
Цена за 200 IОайт EBS объемом 5000 IOS составляет несколько сотен долл аров в месяц. Их
кластер может разорить компанию.
Л уч шая защита от высоких счетов - это измерение , мон итори н г и трезвый расчет.
Испол ьзуйте функции автомасштабирования для удаления емкости , когда это не требу­
етс я , сн ижая затраты в периоды н изкого спроса. Используйте более мелкие экзе м пляры
дл я более детального управле н и я . Следите за шаблонами ис пол ьзова н и я , прежде чем
тратить пакет на зарезервированны е экзе м пляры ил и объем ы с высокой пропускной
способностью. Облако я вляется гибким , и вы можете вносить изменения в свою инфра­
структуру по мере необходимости.
W Дополнительную информацию об CDN см. в разделе 1 9 . 2 .
О кружающая среда ЦС растет, выя вление того, где ден ьги расходуются , может стать
проблемой. Больш им облач н ы м учетны м зап исям могут быть полезны сторонние служ­
б ы , которые анализируют испол ьзование и предлагают фун кции отслеживания и от­
четности . М ы испол ьзовал и Cloudabllity и Cloud Health. Оба подкл ючаются к фун кциям
выставления счетов AWS для разбивки отчетов по пользовател ьскому тегу, сервису или
географичес кому м естоположению.
9.6. ЛИТЕРАТУРА
•
Wптю , A N D REлs , A N D М 1 с нлЕ L Wпт ю . Amazon
Web Services /п A ction . M a n ni ng
PuЫications, 20 1 5.
•
G ooG L E . c l o u d p l a t f o rт . g o o g l e Ы o g . с от. Официал ь н ы й блог Google Cloud
Platfonn .
•
•
•
BAR R , J E F F , AN D OT H E RS АТ Амлzо N WE B S E RV I C E S . a w s . a тa z o n . c oт / Ы o g s / a w s .
Официальн ы й блог Amazon We b Se rvices.
D ю 1тлLОСЕАN . d i g i ta l o c ea n . coт / c oтpan y / Ь l og . Техн ический и производствен­
н ы й блог DigitalOcean.
VoG ELS, WERN ER. А/1 Things Distributed. a l l t h i n g s d i s t r i b u t e d . сот. Блог Вернера
Фогельса (Wemer \Ьgels) , техн ического директора ком пан ии Amazon .
•
•
•
•
Wл RDLEY, S1мoN . Bits or pieces ? Ы о g . g a rdev i a n c e . org.
Блог исследователя и за­
конодателя мод в области облачных технологий Саймона Уордли ( Simon Wardley) ,
содержащий анализ тенденций в области облачных технологи й , а и ногда и резкую
критику.
В 1 л s , RлN DY. c l o u d s c a l i n g . с о т / Ы о g . Рэнди Байес - директор ком пании
OpenStack, имеющий инсайдерскую информаци ю об и ндустри и частн ых облаков
и е го будущем .
The Observation Deck. d t r a c e . o r g / Ы o g s / Ьт с . И нтересные точ­
ки зрения и технические идеи о вычислен иях технического директора ком пании
Joyent, разработавшей специальную, но очень и нтересную платформу.
CлNТRJ LL, BRYA N .
А м л zо N .
y o u t u b e . c oт / Aт a z o n W e b S e rv i c e s . В ы ступле ния на конферен циях
и другие видеоматериалы от компании AWS.
глава
10
Журналирование
Систе м н ые демоны, ядро, утилиты и приложения - все они генерируют журнальные
данн ые , которые ре г истрируются и попадают на дале ко н е безразмерные диски. Срок
полезной службы большинства дан н ых о гран и че н , поэтому их приходится групп иро­
вать, сжим ать, архивировать и , наконец, удалять. Доступом и журнал а м и аудита необхо­
димо управлять точно в соответствии с ре гуляти в н ы м и правилами хранения и нформа­
ции или политикой безопасности, принятой для ва ше го хоста.
В большинстве случаев ре гистрируемое событие перехватывается в виде одной стро­
ки текста, которая вкл ючает вре м е н ну ю метку, тип и сте п е н ь серьезности события ,
а также и м я и иде нтифи катор процесса. Систе м н ые адм и нистраторы н есут ответствен ­
ность з а извлечение полезной информации из это го потока сообще н и й .
Данная задача называется управлением журналами , и е е можно разделить н а несколь­
ко основных подзадач.
•
•
•
Сбор журналов из различ н ых источн и ков.
Предоставление структурированно го интерфейса для запросов, анализа, фильтра­
ции и мон иторин га сообщен и й .
Управление хран е н и е м и истечением срока действия сообщен и й , чтобы инфор­
мация сохранялась до тех пор, пока она поте н ц иал ьно полезна ил и юридически
необходима, но не на неопредел е н н ы й срок.
322
Часть 1. Основы администрирования
Система UNIX исторически упрамяет журналам и через интегрированную, но несколько
рудиментарную систему, известную как syslog, коrорая предстамяет приложения со стан­
дартизованным интерфейсом для отправки сообщений журнала. Демон syslog сортирует
сообщения и сохраняет их в файлы или пересьтает их другому хосту по сети. К сожалению,
sys log решает только первую из перечисленных выше задач регистрации (сбор сообще­
ний), а ее конфи l)'рация сил ьно варьируется среди операционн ых систем.
Возможно, из-за недостатков демона sys log м н огие приложе н и я , сетевые де мон ы ,
с це нарии запуска и другие средства веден ия журнала пол ностью обходят syslog и зап и ­
с ы вают сообщения в свои собственные файлы . Это привело к тому, что в разных версиях
U N I X и даже среди дистрибутивов Liпux журнал ы значительно отличаются друг от друга.
Журнал sys temd от Linux представляет собой вторую попытку привнести
здравомыслие в этот беспорядок. Журнал собирает сообще н и я , сохран яет их
в и ндексированном и сжатом двоичном формате и предоставляет и нтерфе йс
командной строки для прос мотра и фил ьтра ции жур налов. Журнал может
существовать в одиночестве или сосуществовать с демоном syslog с разной
степе нью и нтеграции в зависимости от конфигурации .
Разнообразные сторонн и е и нструменты ( как запатентованные, так и с открытым ис­
ход н ы м кодом ) затрагивают более сложную проблему отбора сообще н и й , которые по­
ступают из большой сети с и сте м . Эти и н струменты вкл ючают такие вспомогательные
средства, как граф ические интерфе й с ы , языки запросов, визуал и зация дан н ых, опове­
щен и е и автоматическое обнаружен и е аном ал и й . Они могут масштабироваться для об­
работки томов сообщен и й порядка терабайт в день. Вы можете подписаться на эти про­
дукты в виде облачной службы или разместить их самостоятельно в частной сети.
Н а рис. 1 0. 1 изображе на архитектура сайта, на котором испол ьзуются все службы
упрамения журнал ам и , упомянутые в ы ш е . Адм и н истраторы и другие заи нтересован­
ные сторон ы могут запус кать графи ческий и нтерфе йс централ изован ного журнально­
го кластера для прос м отра сообщен и й журнала, поступающих из систе м по всей сети.
Администраторы могут также регистрироваться на отдел ьных хостах и получать доступ
к сообщен и я м через журнал systemd ил и файл ы обычного текста, зап исанные демоном
syslog. Если эта диаграмма вызывает у вас больше вопросов , чем ответов, вы ч итаете
правил ьную главу.
П р и отладке пробл е м и устра н е н и и о ш и бок опытн ые адм и н истраторы в п ервую
оч ередь обращаются к журнал а м . Файл ы журналов часто содержат важные подсказки,
указывающие на источ н и к неприятных ош ибок конфи гураци и , ошибок програ м много
обес печ е н и я и пробл е м безопасности. Журнал ы - это первое место , которое вы долж­
ны посмотреть, если демон дал сбой или произошел отказ от е го запуска л ибо возникла
хрон ическая ош ибка при загрузке с исте м ы .
П осле п р и нятия официал ьн ых стандартов, таких к а к PC I DSS, С О В П и I SO 2700 1 ,
и достижения зрелости регуляторн ых норм в отдел ьных отраслях важность четко опре­
дел е н н о й жур н ал ьной стратегии возросла. В н астоя щее вре мя эти в н е ш н и е стандарты
могут потребовать, чтобы для веден и я журнала вы поддерживал и централ изован н ы й
репозитарий предприятия с вре м е н н ы м и меткам и , подтвержден н ы м и протоколом N TP
( N etwork Тime Protocol) и строго определ е н н ы м граф и ком хранен ия . 1 Однако даже ор­
га н и зац и и , не и меющие нормативных требований или требован и й соответстви я , могут
извлечь вы году из централ изованного веден ия журналов.
1 Конеч но, точ ное систем ное время и меет значение даже без н ал и ч и я ре гуляторных норм. Мы
настоятел ьно рекомендуем включить протокол NTP дЛЯ всех ваш и х систе м .
Глава 1 О. Журналирование
323
Система Linux
Источники журналов
Apache httpd
SSH
NTP
cron
другие...
systemd-journal
syslog
Двоичный журнал
Обычные текстовые файлы
Система FreeBSD
Источники журналов
syslog
Apache httpd
SSH
NTP
cron
другие...
Обычные текстовые файлы
Централизованный
кластер журналов
Рис. 10. 1. Архитектура централизованной журнальной системы
В этой гл аве описы вается собстве н н ое програм м н ое обес п еч е н ие для управл е ­
н ия журналам и , используемое в системах Li nux и Free B S D , в кл ючая syslog, журнал
sys temd и приложение logrotate. М ы также вводим некоторые допол н ительные и н ­
струменты для централ и зации и анал иза журналов по всей сети . Глава закрывается н е ­
которы м и общими советами для создания разумной пол итики управления журналом .
1 0. 1 . МЕСТОПОЛОЖЕНИЕ ФАЙЛОВ РЕГИСТРАЦИИ
Систему U N IX часто критикуют з а несогласован ность, и эта крити ка впол н е спра­
ведл и ва. П осмотрите на содержимое каталога файлов ре гистраци и - вы обязател ьно
н айдете файл ы с таки м и и м е нам и , как ma i l log, cron . log и, возможно, еще нечто
спе цифичное для демонов и дистрибутивов. По умолчанию бол ь ш инство этих фа йлов
хран ится в каталоге /var/adm или /var/log, но некоторые приложения разбрас ы вают
журнальные файлы по файловым системам.
В табл . 1 0. 1 представлена информация о наиболее часто испол ьзуе м ых журнальных
файлах демонстрацион ных дистрибутивов. Указа н ы , в частности , следующие сведения:
•
журнал ьные файл ы , подлежащие архи вированию ил и другой обработке;
•
программа, создающая каждый из этих файлов ;
•
информация о том , где задается имя файла;
•
•
•
периодичность удаления устаревшей и нформации , которая считается приемлемой ;
с исте м ы (из ч исла демонстрацион н ых) , в которых испол ьзуется каждый из этих
файлов;
описание содержи мого файлов.
Имена файлов в табл. 1 0. \ дан ы относительно каталогов, /var/log, если не указано
и ное. М н огие журнал ьные файлы из числа перечисленных в табл . 1 0. 1 контролируются
систе мой Syslog , а остал ьные - приложения м и .
Часть 1. Основы администрирования
3 24
Табл и ца 1 0 . 1 . Журнальные файлы
ФаАл
Проrрамма
Место" Ч астота• СистемЫ" Содерасимое/наэн ачение
apache2 / *
httpd
АРТ
д
м
D
D
Журналы НПР-сервера Арасhе (версия 2)
apt*
ф
ф
s
ф
ф
м
м
DF
R
Авторизационные сообщения
s
н
RA
Сведения о выполнении и об ошибках
демона сrоn
s
н
D*
Все сообщения средств демона
s
в
ф
н
д
auth . log
sudo и дp.6
boot . loq
Сценарии rс
cloudini t . log
cloud-init
cron, cron/ cron
log
daemon .
Различные
loq
c\eЬuq*
Различные
dmesq
Ядро
Программы для инсталляции
программных пакетов
Выходная информация сценариев запуска
Выходная информация сценариев запуска
облаков
F, D*
Отладочные сообщения
все
Образ буфера сообщений ядра
м
н
u
Журнал управления пакетом
D*
Сообщения о неудачных попытках
регистрации в системе
ф
s
в
д
н
R
D
R
Журналы НПР-сервера Apache
mail*
Связанные с элек- s
тронной почтой
н
RF
Все сообщения средств электронной
messaqes
Различные
Основной системный журнальный файл
smЬd и др.
н
н
R
saJDЬa/ *
s
ф
secure
sshd и дp.6
s
м
R
Конфиденциальные авторизационные
сообщения
suloq
su
ф
SAH
Учет удачных и неудачных попыток
использования команды su
sysloq*
Различные
loqin
s
в
н
м
D
RD
Основной системный журнальный файл
wtmp
xen/*
Хеп
ф
1m
RD
ф
н
R
dpkq . loq
dpkq
failloq"
loqin
httpd/ *
httpd
kern . loq
Ядро
loqin
lastloq
Xorq . n . loq Xorq
Все сообщения средств ядра
Время последней регистрации в системе
каждого пользователя (бинарный файл)
ПОЧ1ЪI
SamЬa (совместное использование
файлов в системах Wпdows/SMB)
Сообщения о регистрации в системе
(бинарный файл)
Информация от монитора виртуальных
ма ш и нах Хе п
Сообщения об ошибках сервера
X W пdows
yum . loq
yum
ф
м
R
Журнал управления пакетом
' Здесь используются следующие обозначения:
в столбце "Место" : Ф - конфигурационный файл , В - встроенный, S - Syslog ,
в столбце "Частота": Д - ежедневно, Н - еженедельно, М - ежемесячно, Nмn - зависит от размера ( например,
1 m - мегабайт) ,
в столбце "Системы" : D - Deblan и Ubuntu , D* - только Deblan, R - Red Hat и CeпtOS, F - FreeBSD .
б Команды pas swd, s shd, login и shutdown тоже записывают информацию в журнал авторизации.
'Двоичный файл, который должен быть прочитан с помощью утилиты faillog.
Глава 1 0. Журналирование
325
Журнал ьн ы е файл ы обы чно п р и надл ежат пол ьзовател ю r o o t , хотя соглаш е н и я
о владел ьцах и режимах доступа к эти м файлам н е оди наковы в разных систе мах. В не­
которых случаях менее привилегированный де мон (такой как httpd или mysqld) может
потребовать доступ для записи, а затем определ ить ее владел ьца и режим работы соот­
ветственно. Вам , возможно, для просмотра важн ых журнальных файлов, которые имеют
строгие разрешения доступа, придется испол ьзовать команду sudo.
m Дополнительную информацию о разделении диска см. в разделе 20 . б .
Журнальные файлы могут очен ь быстро увел ичи ваться в размере , особенно это каса­
ется файлов для службы электронной почты , веб- и D N S -cepвepoв. Н е контролируе м ы й
файл регистрации может запол н ить весь диск и тем сам ы м вы вести с истему из строя .
Поэтому м ы п редпочитае м определять раздел /var/ 109 как отдел ьный раздел диска
или отдел ьную файловую систему. (Этот совет одинаково полезен как для облач ных эк­
земпляров, и частн ых виртуал ьн ых маш и н , так и для физических серверов.)
Специал ьные журнальные фа йл ы
Бол ьш и нство журнал ьных файлов - это обычные текстовые файл ы , в которые запи­
сываются сообщения о " важных" событиях. Но не которые файл ы из числа перечислен­
ных в табл . 1 0. 1 имеют совершенно другое назначение.
Файл wtmp (иногда wtmpx) содержит зап иси о том, когда пользователи входил и в систе­
му и выходили из нее, а также когда система выкл ючалась или перезагружалась. Это до­
вольно простой файл (новые записи просто добавляются в конец), тем не менее он хранится
в бинарном виде. Расшифровать содержимое файла можно с помощью команды last.
В файле lastlog регистрируется время последнего входа в систему каждого пользовате­
ля. Это разреженный бинарн ый файл, записи которого индексируются по идентификатору
пользователя U I D. Размер файла будет меньше, если назначать идентификаторы по поряд­
ку, хотя вряд ли об этом стоит сильно беспокоиться. Файл las tlog не должен участвовать
в цикле ротаци и , поскольку его размер в больш инстве случаев остается неизменным.
Кроме того, некоторые приложения (особе нно базы дан н ых) создают двоичные фай­
лы транзакций. Н е п ытайтесь управлять эти ми файлами и даже просматри вать их, иначе
терминал ьное окно выйдет из строя.
Ка к п росмотреть зап иси в журнале sys temd
В с истемах Linux, в которых ведется журнал sys temd, сам ым простым и легким спо­
собом просмотра записей я вляется команда j ournal ctl , которая вы водит на экран
сообще ния из журнала sys temd. С ее помощью можно прос мотреть все записи в жур­
нал е ил и , указав флаг -u,
сообщения, касающиеся конкретного служебного модуля.
Сообщения можно фил ьтровать и устанавл ивать другие огран иче н и я , такие как интер­
вал времени, идентификатор процесса и даже путь к конкретному выполняемому файлу.
Например, следующая выходная информация извлечена из зап исей журнала о демо­
не S S H :
-
$ j ou rna l c tl - u s sh
- - L o g s b e g i n a t S a t 2 0 1 6 - 0 8 - 2 7 2 3 : 1 8 : 1 7 uтс , end at S a t 2 0 1 6 - 0 8 - 2 7
2 3 : 3 3 : 2 0 uтс . - Aug 2 7 2 3 : 1 8 : 2 4 u x en i a l s s hd [ 2 2 3 0 ] : S e r v e r l i s t e n i n g o n О . О . О . О p o r t 2 2 .
Au g 2 7 2 3 : 1 8 : 2 4 u x e n i a l s s hd [ 2 2 3 0 ] : S e rve r l i s t e ning on : : p o r t 2 2 .
Aug 2 7 2 3 : 1 8 : 2 4 u x e n i a l s y s temd [ l ] : S t a r t i n g S e c u r e S he l l s e r ve r . . .
Aug 2 7 2 3 : 1 8 : 2 4 uxe n i a l s y s temd [ l ] : S t a r t e d Ope n B S D S e c u r e S h e l l s e rve r .
Часть 1. Основы администрирования
326
Aug 27 2 3 : 1 8 : 2 8 uxe n i a l s s hd [ 2 3 2 6 ] : Ac c e p t e d p uЫ i c ke y for bwh a l e y f rom
1 0 . 0 . 2 . 2 p o r t 6 0 3 4 1 s s h 2 : RSA S HA2 5 6 : a a R f G d 1 0 u n t n 7 5 8 +UCpx L 7 g kS w c s
z kAYe / w u k r dBATc
Aug 27 2 3 : 1 8 : 2 8 uxen i a l s s hd [ 2 3 2 6 ] : pam_un i x ( s s h d : s e s s i on ) : s e s s ion
op e n e d f o r u s e r bwh a l e y Ь у ( ui d = O )
Aug 2 7 2 3 : 1 8 : 3 4 ux e n i a l s s h d [ 2 4 8 0 ] : D i d n o t r e c e ive i d en t i f i c a t i on s t r i n g
f r om 1 0 . 0 . 2 . 2
С помощью команды j ournalctl - f можно выводить на экран новые сообще н ия
по мере их постуШiения. Это эквивалент л юбимой команды tail -f, позволяющей сле­
дить за добамяемыми текстовыми файлами по мере их постуШiения.
В следующем разделе мы рассмотрим демон systeшd-j ournald и его конфиrурацию.
1 0.2. ЖУРНАЛ SYSTEМD
Журнал sys temd долже н б ыл заме н ить все остал ьные подс исте м ы Linux
и поэтому он содержит демон регистрации с именем systemd - j ournald.
О н выпол няет больши нство функци й , связа н н ых с регистрацией событи й ,
в зависимости о т конфигурации систе м ы . Есл и в ы сомневаетесь. стоит л и
переходить на systemd, потому что syslog и так делает все , что вам нужно,
пос вятите н е м ного времени изуч е н и ю возможностей sys temd. После этого
вы убедитесь в его преимуществах.
В отл ичие от системы syslog, которая обычно сохраняет сообщения журнала в тек­
стовых файлах, журнал systemd хранит сообщения в двоичном формате . Все атрибуты
сообщен и й индексируются автоматическ и , что делает журнал проще и быстрее для по­
иска. Как обсуждалось выше, вы можете испол ьзовать команду j ournalctl дл я про­
смотра сообще н и й , хранящихся в журнале.
Журнал собирает и индексирует сообщения из нескол ьких источн и ков.
•
•
•
•
•
Сокет /dev/log для сбора сообщений от программного обеспечен и я , отпрамяю­
щего сообщения согласно соглашениям систе м ы Syslog.
Файл устройства /dev/Шsg для сбора сообщений от ядра Linux. Журнал ьн ый де­
мон systemd заменяет традицион н ы й процесс klogd, который ранее прослуш и­
вал этот канал и п еренапрамял сообщения от ядра в систему Syslog.
Сокет U N IX / run/ sys temd/ j ournal / s tdout для обслуживания програ м м н ого
обеспечения, которое записывает сообщения журнала в стандартн ый вывод.
Сокет U N IX / run/ systemd/ j ournal для сервисного программного обеспечения ,
отпрамяющего сообщения через API журнала systemd.
Сообщения аудита от демона ядра audi td.
Смелые адм и н истраторы моrут испол ьзовать утил иту systemd - j ournal - remo te
(и ее аналоги , sys temd - j ournal-gateway и systemd - j ournal-upload) для потоко­
вой передач и сериал изованных сообще н и й журнала по сети в удал е н н ы й журнал . К со­
жал е н и ю , эта фун кция не постамяется предуста новлен ной в обычн ы х дистрибути вах.
На момент написания дан н ого те кста эти пакеты б ыл и доступн ы дл я систем Deblan
и Ubuntu, но не для Red H at или CentOS. Мы ожидаем , что в ближайшее время эта ситу­
ация будет испрамена; тем временем мы рекомендуем придерживаться с исте м ы Syslog,
если вам нужно пересьшать сообще ния журналов между системами .
Глава 1 о. Журналирование
327
Настройка журнала sys temd
Конфигурацион н ы й файл журнала ло умолчан и ю
/ e t c / sys temd / j ournald .
conf; однако этот файл не предназначе н для прямого редактирования . Вместо этого до­
бавьте свои настроен н ые конфигурации в каталог / etc/ sys temd/ j ournald . conf . d.
Л юбые файл ы , размещен н ые там с рас ш ирением . con f , автоматически вкл ючаются
в конфи гурацию. Чтобы настроить собствен н ые параметр ы , создайте в этом каталоге
новый файл с расш ирением conf и вкл ючите н ужные параметры.
П о умолчан и ю файл j ourna ld . conf содержит п роком м е н т и рова н ную верс и ю
каждой возможной опци и , а также знач е н и е по умолчан и ю каждо го параметра, п о ­
этому вы �.tожете сразу увидеть, ка кие о п ц и и доступ н ы . О н и в кл ючают в себя м а к ­
симал ь н ы й размер жур нал а , период хран е н ия сообще н и й и разл и ч н ы е огран и ч е н и я
скорости .
Опция S t o ra g e определяет, следует ли сохранять журнал на диск. Возможные зна•1е­
ния н есколько сбивают с толку:
-
.
•
•
•
•
vo l a t i l e сохраняет журнал только в памяти .
pe r s i s t e n t сохраняет журнал в каталоге /var/ log/ j ournal / , создавая его при
необходи мости.
auto сохраняет журнал в каталоге /var/ log/ j ournal / , но не создает каталог. Это
значение по умолчанию.
none удаляет все данные журнала.
Большинство дистрибутивов Linux (вкл ючая все наши примеры) по умолчани ю ис­
пол ьзуют значение a u t o и содержат каталог /var/ l og/ j ourna l . Следовательно, жур­
нал не сохраняется между перезагрузками по умолчанию, что я вляется неудачн ы м .
В ы можете измен ить это поведе н и е л и бо путе м создан и я каталога / v a r / l og /
j ournal , л ибо путем обновления журнала для испол ьзования постоя н ного хранил и ща
и перезапуска systemd- j ournald:
# mkdir /etc/ sys temd/ j ournald . conf . d/
# cat << END > /etc/ sys temd/ j ournald . conf . d/ s torage . conf
[ Journal ]
Storage=pers i s tent
END
# sys temctl res tart sys temd- j ournald
Эта серия команд создает настраи ваем ы й каталог конфигурации j ournald . conf . d,
создает файл конфигураци и , чтобы установить параметр S t o ra g e равным p e r s i s t e n t ,
и перезапус кает журнал , чтобы новые настройки вступ ил и в силу. Демон sys temd ­
j ourna ld теперь создаст каталог и сохран ит журнал . М ы рекомендуем выпол н ить это
изме нение для всех систем; было бы очень обидно терять все данн ы е журнала при каж­
дой перезагрузке системы.
Одн и м из самых неожиданн ых параметров журнала я вляется S e a l , что позвол яет
систе ме Forward Secure Sealing ( FSS) повысить целостность сообще н и й журнала. П р и
вкл ючен ной системе FSS сообще ния , отправленные в журнал , не могут быть изме н е ­
ны без доступа к паре кри птографических кл ючей. Вы сам и генери руете пару ключе й ,
выпол н и в команду j ournal ctl - - setup - keys . Обратитесь к справоч н ы м стран и цам
для файла j ournald . conf и команды j ournalctl , чтобы увидеть пол н ы й обзор этой
опци и.
328
Часть 1. Основы администрирования
Доба вление дополн ительных параметров
фильтрации для журнала
В кон це разделе 1 0. 1 . м ы привели короткий пример поиска журнала с помощью ко­
манды j ournal ctl . В этом разделе мы покажем несколько допол н ительных способов
испол ьзования команды j ournalctl для фильтрации сообще н и й и сбора информации
о журнале.
Для того чтобы нормальные пользовател и могл и ч итать из журнала без необходимых
разрешений sudo, добавьте их в группу U N lX s y s t emd - j o u rna l .
Опция -di sk-usage показывает размер журнала н а диске.
# j ournalctl - -disk-us age
J o u r n a l s t a ke up 4 . ОМ on di s k .
П араметр - l i s t -boots показывает посл едовател ьный список с исте м н ы х загрузок
с числовы м и идентифи катора м и . Самая последняя загрузка всегда и меет идентифика­
тор, равн ый О. Даты в конце строки показы вают временные метки первого и последне го
сообще н и й , с генерирован ных во время этой загрузки.
# j ournalctl - - l i s t-boots
- 1 с е О . . . Sun 2 0 1 6 - 1 1 - 1 3 1 8 : 5 4 : 4 2 UTC -Mon 2 0 1 6 - 1 1 - 1 4 0 0 : 0 9 : 3 1
о 8 4 4 . . . Mon 2 0 1 6 - 1 1 - 1 4 0 0 : 0 9 : 3 8 UTC -Mon 2 0 1 6 - 1 1 - 1 4 0 0 : 1 2 : 5 6
Вы можете использовать опцию -Ь, чтобы ограничить отображен и е журнала опреде­
л е н н ы м сеансом загрузки . Например, для просмотра журналов, сгенерирова н н ых ал го­
ритмом SSH во время текущего сеанса:
# j ournalctl -Ь О -u s sh
Для того чтобы показать все сообще н и я , начи ная с прошлой пол ноч и до сегодняш­
него дня, выполн ите команду:
# j ournalctl - - s ince=yes terday - -unti l=now
Для того чтобы показать последн ие 1 00 зап исей журнала из определен ного двоично­
го файла, выпол н ите команду:
# j ournalctl -n 1 0 0 /usr/ sbin/ s shd
Дл я п ол уч е н и я краткой с п р а в к и об этих а р гу м е н тах и с п ол ьзуйте команду
j ournalctl - -help.
Совместное использова ние с системой Syslog
К а к система Syslog , т а к и журнал sys temd по умолчан и ю актив н ы для каждой из
наших демонстрационных с истем Linux. Оба пакета собирают и сохраняют сообщения
журнала. Зачем нужно, чтобы оба они работали , и как это сделать?
К сожал е н и ю , в журнале отсутствуют м ногие функции , доступн ы е в системе Syslog.
Как будет показано в разделе 1 0. 3 , с истема rsyslog может получать сообще н и я от раз­
л ичных входных допол нительных модулей и перенаправлять их на разнообразный набор
выходов в соответствии с фил ьтрами и правила м и , которые невозможны , есл и исполь­
зуется журнал sys temd. В среде sys temd существует и нструмент удал е н ного потока,
sys temd - j ournal - remote , но он относительно новы й и не сравни вался с систе мой
Syslog. Адм и н истраторам также может быть удобно хран ить определ е н н ы е файлы жур­
налов в виде обычного текста , как это делает систе ма Syslog, а не в двоичном формате
журнала.
Глава 1 о. Журналирование
329
М ы ожидае м , что с о временем новые функции в журнале узурп и руют обязан ности
системы Syslog. Н о на дан н ы й момент дистрибутивам Linux по-прежнему необходимо
запустить обе системы для достижения пол ной функциональности.
Механ и ка взаимодействия между журналом sys temd и системой Syslog несколько
запутанна. Н ачнем с того, что демон systemd- j ournald берет на себя ответственность
за сбор журнал ьн ых сообщен и й из /dev/log, сокета протоколирова н и я , который исто­
рически контрол ировался системой Syslog.2 Для того чтобы с истема Syslog могла выпол ­
нить регистрацию, о н а должна получ ить доступ к потоку сообще н и й через систе м н ы й
менеджер sys temd. Система Syslog может извлекать сообщен ия из журнала двумя с по­
собам и .
•
•
Журнал sys tem.d может перес ылать сообщен ия другому сокету (обычно / run /
sys tem.d/ j ournal / syslog ) , из которого демон систе м ы Syslog может их читать.
В этом режиме демон system.d- j ournald им итирует исходны х отправителей со­
обще н и й в соответствии со стандартн ы м A P I с исте м ы Syslog. Следовател ьно, пе­
ренаправляются только основные параметры сообще н и я ; некоторые метаданные,
специфич ные для систе м ы , теря ются.
В качестве альтернати вы с исте ма Syslog может обрабаты вать сообще ния непо­
средстве нно из и нтерфейса прикладного програ м м ирован ия журнал а таким же
образом, как и команда j ournalctl. Этот метод требует я вной поддержки сотруд­
н ичества со сторон ы syslogd, но это более полная форма и нтеграци и , которая
сохраняет метаданные для каждого сообщения.3
СистеМ1>1 Deblan и Ubuntu по умолчанию используют преж ний метод, но Red Hat
и CentOS ис пол ьзуют послед н и й . Чтобы определить, какой тип и нтегра ц и и был на­
строен в ваш е й с исте м е , проверьте о п ц и ю ForwaгdToSyslog в файле / e t c / s y s tem.d/
j ournald . conf. Есл и его значение равно ye s , испол ьзуется переадресация сокетов.
1 0.3. С истЕмА SvsLoG
Syslog
это пол нофун кционал ьная с и стем а регистрации событи й , нап исан ная
Эриком Олл маном ( Eric Allman ) , и стандартн ы й п ротокол регистра ц и и событи й , ут­
вержде н н ы й I ETF.4 Она выполняет две важные фун кции : освобождает программ истов
от утом ител ьной механ ической работы по веде н и ю журнал ь н ы х файлов и п ередает
управление журнальной регистрацией в руки адми н истраторов. До поя вл е н ия систе м ы
Syslog каждая программа сама выбирала схему регистрации событий , а у системных ад­
министраторов не было возможности контрол ировать, какая и нформация и где именно
сохраняется.
Система Syslog отличается высокой гибкостью. Она позволяет сортировать сообще­
ния по источ н и кам (facility) и уровню важности (severity) и направлять их в разл ичные
пун кты назначения: в журнальные файл ы , на терминал ы пол ьзователе й и даже на дру­
гие ком пьютеры. Одной из самых цен н ы х особенностей этой систе м ы я вляется ее спо­
собность централ изовать процедуру ре гистрации событий в сети .
-
2 Точнее, ссылки журнала из /dev/log в / run/ sys temd/ j ournal/dev- log .
1 Краткое описание досту п н ых метада н н ых с м . на с п равоч ной стран и uе s y s temd . j ourna l ­
fields .
•последняя по времени версия спецификации системы Syslog
RFC5424, но п редыдущая версия,
RFCЗ \ 64, луч ше отражает реальную инсталлирован ную систему.
-
Часть 1. Основы администрирования
330
В с истемах Linux исходный демон систе м ы Syslog (syslogd) был заменен более но­
вой реал изацией , назы вае мой Rsyslog (rsys logd) . Rsyslog - проект с открытым исход­
н ы м кодом , который рас ш иряет возможности исходной систе м ы Syslog, но поддержива­
ет обратную совмести мость с интерфейсом прикладного программ и ро ван ия. Это сам ый
разу м н ы й выбор для адм и н и страторов , работающих в совре м е н н ы х с истемах U N IX
и Linux, и это единственная версия Syslog, которую м ы рассмотри м в этой главе .
Систе ма Rsyslog доступна для Free B S D , и м ы рекомендуем вам прин ять ее,
а не стандартный систе м н ы й журнал Free B S D , если у вас нет простых тре ­
бован и й . И нструк ции по преобразованию системы Free B S D для испол ьзован и я демона rsyslog содержатся по адресу w i k i . r s y s l o g . с от / i nd e x .
php / FreeB S D .
Есл и в ы решите придержи ваться традиционной системы s y s l o g в операционной с и ­
стеме Free B S D , перейдите в раздел "Синтаксис sysklogd" для получ е н ия и нформации
о конфи гурации .
Ч тение сооб щ ени й си сте м ы Syslog
П ростые сообщ е н и я с исте м ы Syslog можно ч итать с помощью и н струм е нтов с и ­
стем U N IX и Linux для обработки те кста , например команд grep , l e s s , cat и awk.
П р и веде н н ы й н иже фрагмент кода де монстрирует сообще н и я о т и п и ч н ы х со б ытиях
в жур нале /var/ log/ eyelog, поступ ившие от хоста системы Deblan.
j e s s i e # cat /var/ log/ sysloq
Jul 1 6 1 9 : 4 3 : 0 1 j e s s i e ne two r k i ng [ 2 4 4 ] : bound t o 1 0 . 0 . 2 . 1 5 -- renewal i n
4 2 0 9 3 s e conds .
Jul 1 6 1 9 : 4 3 : 0 1 j e s s i e
Jul 1 6 1 9 : 4 3 : 0 1 j e s s i e
s t a t d i dm ap d .
Jul 1 6 1 9 : 4 3 : 0 1 j e s s i e
Jul 1 6 1 9 : 4 3 : 0 1 j e s s i e
Jul 1 6 1 9 : 4 3 : 0 1 j e s s i e
Jul 16 1 9 : 4 3 : 0 1 j essie
rpcb i nd [ 3 9 7 ] : S t a r t i ng rpcb i n d daemon . . . .
n f s c omm on [ 4 1 2 ] : S t a r t i n g NFS c ommon u t i l i t i e s :
-
c r on [ 4 3 6 J : ( C RON ) I N FO ( p i d f i l e fd
3)
c r on [ 4 3 6 ] : ( C RON ) I N FO ( Ru n n i n g @ r e b o o t j ob s )
acpid : s t a r t i ng up w i t h ne t l i n k and t he i n p u t l a y e r
docke r [ 4 8 6 ] : t ime = " 2 0 1 6 - 0 7 1 6 T 1 9 : 4 3 : 0 1 . 9 7 2 6 7 8 4 8 0 Z " l e ve l = i n fo ms g = " Da emon h a s comp l e t e d
ini t i a l i zation"
J u l 1 6 1 9 : 4 3 : 0 1 j e s s i e doc k e r [ 4 8 6 ] : t ime = " 2 0 1 6 - 0 7 1 6T l 9 : 4 3 : 0 1 . 9 7 2 8 9 6 6 0 8 Z " l e ve l = i n fo m s g = " Do c ke r da emon "
c ommi t= c 3 9 5 9Ы e x e c d r i v e r=n a t ive 0 . 2 g r a p h d r i ve r = a u f s
ve r s i on= l . 1 0 . 2
Jul 1 6 1 9 : 4 3 : 0 1 j e s s i e doc ke r [ 4 8 6 ] : t i me= " 2 0 1 6 - 0 7 1 6T 1 9 : 4 3 : 0 1 . 9 7 9 5 0 5 6 4 4 Z " l e ve l = i n f o ms g = " A P I l i s t e n o n / v a r / ru n /
d o c ke r . s o c k "
=
-
Этот п р и м е р содержит сооб ще н и я , посту пив ш и е от нескол ьких разных де монов
и п одсистем : сети , NFS, aron , D ock er и демона управл е н ия питан ием acpid. Каждое
сообщение содержит следующие поля , разделен ные пробелам и.
•
Времен ная метка.
•
Систе м ное и м я хоста , в да нном случае j e s s i e .
•
И м я п роцесса и его идентификатор в квадратных скобках.
•
Полезная нагрузка сообщен и я .
Глава 1 о. Журналирование
331
Некоторые демоны кодируют полезную нагрузку сообщения , добавляя в них мета­
данные, которые сопровождают это сообщения. В приведенном выше примере процесс
docker вкл ючает свою временную метку, уровен ь журнала и информацию о конфигура­
ции демона. Эту дополн ительную и нформацию генерирует и форматирует посылающий
процесс .
А рхитектура системы Rsyslog
Сообще н ия журнала можно представить как поток событий, а с истему Rsyslog - как
механ изм обработки потока событий . Журнальные сообщен ия , которые и нтерпретиру­
ются как события , представляются в виде входов , обрабатываются фил ьтрами и пере­
сылаются по ацресу назначения . В с истеме Rsyslog каждый из этих этапов является кон ­
фигурируе м ы м и модул ьн ы м . По умолчан ию система Rsyslog настроена в файле /etc/
rsyslog . conf.
П роцесс rsy s l ogd обычно запус кается при загрузке и в ы полняется н е п рерывно.
Програ м м ы , которые известн ы системе Syslog , заносят записи журнала в специальный
файл /dev/ log, сокет домена U N IX. В конфигураци и систем без демона sys temd де­
мон rsyslogd напрямую считывает сообщения из этого сокета , консул ьтируется с его
конфигурационн ы м файлом для руководства по их маршрутизации и отправляет каждое
сообщение в соответствующее место назначения. Также можно (и желательно) настраи ­
вать демон rsyslogd для прослуш и вания сообщен и й в сетевом сокете.
Есл и вы изменяете файл /etc / r sys log . conf ил и л юбой из его вкл юче н н ых фай­
лов, то должн ы перезапустить демон rsys logd, чтобы ваши изменения вступили в силу.
Сигнал T E RM прекращает работу демона. Сигнал HU P заставляет демон rsyslogd закры­
вать все открытые файл ы журналов, что полезно для ротации ( пере и менования и пере­
запуска) журналов.
По сложившейся трациции демон rsyslogd записывает свой идентификатор процесса
в файл /var/run/syslogd . pid, поэтому послать сигнал из сценария в процесс rsyslogd
не составляет труда.5 Например, следующая команда посылает сигнал зависания.
$ sudo kill -НUР ' /bin/cat /var/run / sys loqd . pid '
Поп ытка сжать или выпол н ить ротацию журнал ьного файла, который был открыт
демоном rsyslogd для зап иси, - плохая идея, которая приводит к непредсказуемым
резул ьтатам , поэтому перед эти м обязател ьно отправьте сигнал H U P . И н формацию
о правил ьной ротации журнала с помощью утилиты logrotate см. в разделе 1 0.4.
Версии Rsyslog
Систе м ы Red H at и CentOS используют Rsyslog версии 7 , а Deblan и Ubuntu обновле­
н ы до версии 8. Пользователи Free B S D , устанавливающие с исте му из портов, могут вы­
брать л ибо верс и ю 7, либо 8 . Как и следовало ожидать, в проекте Rsyslog рекомендуется
испол ьзовать самую последн юю версию, но мы не следуем эти м советам . Тем не менее,
есл и ваша операцион ная система я вляется самой современ ной , это не повл ияет на ваш
опыт ведения журнала.
Версия Rsyslog 8 я вляется основным переработанным вариантом основного механиз­
ма, и, хотя в его устройстве м ногое изменилось с точки зрения разработчи ков модулей,
аспекты , обращенные к пользователю, остаются в основном неизменными. За некоторы­
м и исключениями, конфигурации в следующих разделах действительны для обеих версий.
5 В современных версиях системы I.inux /var/ run является символической ссылкой н а / run.
332
Часть 1. Основы администрирования
К онфигурация Rsyslog
Поведе н ие демона rsyslogd контролируется настрой ками в файле /etc/ rsyslog .
conf. Все н аш и примеры дистрибутивов Linux включают в себя простую конфигураци ю
с разум н ы м и значениями п о умолчани ю , которые подходят бол ьшинству организаций .
Пустые строки и строки , начинающиеся с символа # , и гнорируются . Строки в конфигу­
рации систе м ы Rsyslog обрабатываются в порядке от н ачала до кон ца, а порядок имеет
значение.
В верхн е й части файла конфигурации находятся глобальные свойства, которые на­
страивают сам дем о н . В этих строках указа н ы загружаем ы е модул и , формат сообще­
н и й по умолчан и ю , п рава собствен ности и разрешения файлов, рабоч и й каталог, в ко­
тором можно сохранить состоян и е систем ы Rsyslog, и другие параметр ы . Следующая
примерная конфигурация адаптирована из стандартного файла rsyslog . conf в вер­
сии Deblan Jessie.
# Поддержка л о к а л ь н о й с и с т емы р е г и с т р а ции
$ ModLoad imux s o c k
# Поддержка р е ги с т р а ции ядра
$ ModLoad imkl o g
# Выводи т ь с о о бще ния в тр адици онном форма т е с временными мет ками
$ Ac t i on F i l e D e f a u l t T e mp l a t e R S Y S L OG_T r a d i t i on a l Fi l e Fo rmat
# Н о в ым файлам р е г и с т р ации н а з н ач а е т с я владелец r oot : a dm
$ Fi l e 0wne r r o o t
$ Fi l e G r oup a dm
# С т андартны е пра в а д о с тупа дл я в н о в ь с о з данных файлов и к а т а л о г о в
$ Fi l e C r e a t eMode 0 6 4 0
$ Di r C r e a t eMode 0 7 5 5
$ Uma s k 0 0 2 2
# К а т а л о г , в к о т о р ом х р а н я т с я р а б очие файлы r s y s l og
$ W o r kDi r e c t o r y / va r / s p o o l / r s y s l o g
Большин ство дистрибутивов испол ьзуют устаревшую директиву $ I n c l ud e C o n f i g
для вкл ю ч е н и я допол н ител ь н ы х файлов и з каталога конфигураци и , обы ч н о / e tc /
rsyslog . d/ * . conf. Поскольку порядок важе н , дистрибутивы организуют файлы с по­
м ощью п редшествующих имен файлов с номерами . Например, конфигурация Ubuntu
по умолчанию включает следующие файл ы :
2 0 -ufw . conf
2 1 - cloudini t . conf
5 0 - defaul t . conf
Система Rsyslogd и нтерполирует эти файлы в файл /etc/rsys log . conf в лексико­
графическом порядке , чтобы сформировать окончательную конфигурацию.
Ф ил ьтр ы , иногда называемые селекторами , составляют основную часть конфигура­
ции систе м ы Rsyslog. Они определя ют, как с исте ма Rsyslog сортирует и обрабаты вает
сообще н и я . Фильтры формируются из в ыраже н и й , выбираются конкретные критерии
сообщений и действия , которые направляют выбранные сообщения в нужное место на­
значения.
Глава 1 0. Журналирование
333
Система Rsyslog понимает три синтаксиса конфигурации.
•
•
•
Строки, испол ьзующие формат исходного файла конфигура ц и и с истем Syslog.
П осле появления демона регистрации ядра sysklogd этот формат известен как
"формат sysklogd " . О н прост и эффективен , но и меет некоторые ограничения.
Ис пол ьзуйте е го для создания простых фильтров.
Устаревшие директивы системы Rsyslog, которые всегда начинаются с знака $. И х
с интакси с уходит корн я м и в старые версии с истем Rsyslog и действительно дол­
жен быть признан устаревш и м . Однако не все опции бьm и преобразованы в новый
с интаксис, и поэтому этот с интаксис остается важны м для н екоторых фун кций.
С интаксис RainerScript , назва н н ы й в честь Райнера Герхардса ( Reiner Gerhards) ,
ведущего автора систе м ы Rsyslog. Это с интаксис сценариев, который поддержи­
вает выражен и я и функции. Вы можете использовать е го для настройки большин­
ства, но н е всех аспектов с истемы Rsyslog.
М н огие конфигурации в реальном мире вкл ючают в себя сочетание всех трех фор­
матов, иногда с запутанным эффектом. Хотя синтаксис RainerScript существует с 2008 r. ,
он все еще испол ьзуется нем ного реже других. К счастью, н и оди н и з диалектов н е яв­
ляется особен но сложны м . Кроме того , н а м ногих сайтах н е придется делать крупную
операцию по простым конфигурациям , включенным в их распределение ресурсов.
Для того чтобы перейти из традиционной конфигураци и Syslog, просто начните с су­
ществующего файла syslog . conf и добавьте параметры для функций с исте м ы Rsys\og,
которые вы хотите активировать.
Модули
Модули систем ы Rsyslog расш иряют возможности основного механизма обработки .
Все входы (источн ики) и выходы (адресаты) н астраиваются через модул и , а модули мо­
гут даже анализировать и изменять сообщен ия . Хотя большинство модулей были н ап и ­
саны Рай нером Герхардсом , некоторые из н их были внесен ы третьим и лицами . Если в ы
програм м ист на языке С , то можете написать свой собствен н ы й .
И мена модулей соответствуют предсказуемому префиксному ш аблону. Те , которые
нач инаются с префикса im, являются модулями ввода; om*
модули вывода, mm*
мо­
дули модификации сообщен и й и т.д. Большинство модулей и меют допол нительные па­
раметры конфигурации , которые настраи вают и х поведение. Докуме нтаци я о модулях
с исте м ы Rsyslog является пол н ы м и исчерпывающи м справочн иком.
В следующем списке кратко описаны некоторые из наиболее распространенных (или
интересных) модулей ввода и вывода, а также несколько экзотических примеров.
-
•
•
•
•
-
Модул ь i m j o u rn a l и нтегрируется с жур н алом sys temd, как описано в разделе
" Совместное использование с системой Syslog".
М одул ь i m u x s o c k считывает сообщения из сокета домена U N IX. Если журнал
systemd отсутствует, это значение устанавл ивается по умолчанию.
Модуль i m k l o g пон имает, как читать сообщения ядра в с истемах Linux и BSD.
М одул ь im f i l e преобразует простой текстовый файл в формат сообщен и я систе­
мы Syslog. Это полезно для импорта файлов журналов, созданных с помощью про­
грамм ного обеспечения, не имеюще го встроенной поддержки Syslog. Существуют
два режима: режим опроса, который проверяет файл на наличие обновлений в на­
страиваемый интервал и режи м уведомления ( i n o t i f y ) , который использует и н ­
терфейс событий файловой систе м ы Linux. Этот модуль допускает восстановление
после отключения при перезапуске демона rsyslogd.
Часть 1. Основы администрирования
334
•
•
•
•
•
•
•
Модул и imt c p и imudp прини мают сете вые сообще н ия через ТС Р и U D P соот­
ветствен но. Они позволяют централизовать веден и е журнала в сети . В сочетании
с драй вера м и сетевого потока с истем ы Rsyslog модул ь ТС Р также может при н и ­
м ать взаимно аутентифицирован н ые сообщен ия систе м ы Syslog через T L S . Для
сайтов Linux с чрезвычайно высоким объемом с м . также модуль imp t cp.
Если модул ь imma r k присутствует, система Rsyslog создает сообщен ия с отметкой
времени через равные промежутки времени. Эти метки времени могут помочь вам
понять, что ваща машина потерпела крах между 3 : 00 и 3 : 20 утра, а не просто но­
чью. Эта информация также я вляется бол ьшой помощью, когда вы отлаживаете
пробле м ы , которые происходят регулярно. Для настройки и нтервала метки ис­
пользуйте параметр Ma r kМe s s a g e P e r i od.
М одул ь omf i l e зап исывает сообщения в файл . Это наиболее часто используе м ы й
модул ь вывода и единстве н н ы й , который настроен п р и установке по умолчанию.
М одул ь o m f w d пересылает сообщения на удал е н н ы й сервер Syslog через ТС Р ил и
U D P. Этот модуль особен н о полезен , есл и ваша орган изация н уждается в центра­
л изован ном протоколировании.
Модул ь omka f ka
это реализация производителя для потокового движка Apache
Katka. Пол ьзователи крупн ых сайтов могут извлечь выгоду из возможности обра­
батывать сообще н и я , у которых есть много поте нциальных потребителей.
-
Аналогично модул ю omka f ka модуль ome l a s t i c s e a r c h записывается непосред­
ственно в кластер Elasticsearch. Дополн ител ьную и нформацию о стеке управления
журналом ELK, который включает Elasticsearch в качестве одного из с воих ком по­
н ентов, с м . в разделе I 0. 5 .
М одуль ommys q l отправляет сообщения в базу дан н ы х MySQL. Распределение ис­
точн и ков Rsyslog содержит примерную схему. Для повышен ия надежности объеди ­
н ите этот модуль с устаревшей директивой $Ma i nMs gQueue S i z e .
Модул и можно загружать и настраивать либо с помощью устаревших форматов кон ­
фигурац и и , л ибо с помощью с интаксиса RainerScript . Н иже м ы п р и водим н екоторые
примеры в разделах, пос вяще н н ых кон кретны м форматам .
Синтаксис демона sysklogd
С интаксис демона sysklogd
это традицион н ы й формат систе м ы Syslog. Если вы
знаете, как работает стандартный демон syslogd, например е го версия, и нсталли рован­
ная в системе Free B S D , то, вероятно, в ы знаете все , что требуется . (Но учтите , что файл
конфигурации традиционного демона syslogd называется / etc/ syslog . conf , а н е
/etc/rsyslog . conf . )
И значал ьно этот формат был предназначен для пересылки сообщен и й определен но­
го типа в заданный файл или по задан ному сетевому адресу. Базовый синтаксис зап исей
файла таков.
-
с ел ект ор
д е й ств ие
Селектор отделе н от действия одн и м или н ескол ькими пробелами ил и знаком табу­
ляции. Например, строка
auth . *
/ va r / l o g / a u t h . l og
обеспечивает сохранение сообщений, связанных с аутентификацией пользователей, в файле
/var/ log/auth . log.
Глава 1 0. Журналирование
335
Селектор указывает источник (facility), посьmающий журн ал ьн ое сообще н и е , и уровень
важности (severity) эrого сообщения. Формат селектора выглядит следующим образом.
и с то чни к . уров ень_в а жно с ти
Названия источ ников и уровней важности следует выбирать из стандартного спис ка
значений; программ ы не могут самостоятельно составлять так и е с п и с к и . Есть источ н и ­
ки , определенные для ядра, для основных групп утилит и для локальных программ. Все
остальное проходит под общим названием u s e r (т.е. пол ьзовател ь) .
Селекторы могут содержать сим вол ы * и none , которые обозначают " все" и " н иче­
го" соответствен но. В селекторе разрешается через за п я тые перечислять группу и сточ­
ников. Допускается также разделение самих селекторов с помощью точки с запятой.
В общем случае селекторы объединяются операцией OR, т. е . указанное действие бу­
дет выпол няться для сообщения, соответствующего любому селектору. Селектор уровня
none означает исключение перечисленных в нем источ н и ков, независимо от того, что
указано в остальных селекторах этой же строки.
При ведем несколько примеров селекторов.
# Приме н я ем д е й с т в и е ко в с е м с о о бще ниям о т f a c i l i t y . l eve l
fac i l i t y . l e v e l
action
# Приме н я ем д е й с т в и е к о в с е м сообщениям о т f a c i l i t y l . l ev e l и f a c i l i t y2 . l eve l
fac i l i t y l ,
f a c i l i t y 2 . l ev e l
action
# Приме н я ем д е й с т в и е т о л ь к о к с о общениям от f a c i l i t y l . l e ve 1 1· и f ac i l i t y 2 . l eve l 2
action
faci l i t y l . l e v e l l ; f a c i l i t y2 . 1 eve 1 2
# Приме н я ем д е й с т в и е т ол ь ко и с точникам с з аданным уровнем в ажн о с ти
* . level
action
# Приме н я ем д е й с т в и е ко в с е м и с т очникам,
* . l e vel ; ba d f a c i l i t y . none
кр оме b a d f a c i l i t y
action
В табл. 1 0.2 перечислен ы допустимые назван ия источн иков. Они определены в стан­
дартной библ иотеке в файле sys log . h.
Таблица 1 0 . 2 . Названия средств Syslog
Источник
Проrраммы или сообщения, которые ero ис п ольэу�от
auth
Команды, связанные с безопасностью и авторизацией
*
Все источники, кроме ma r k
a u t hp r i v
Конфиденциальные авторизационные сообщения
cron
Демон cron
daemon
Системные демоны
ftp
Демон ftpd (устаревший)
kern
Ядро
l o ca l 0 - 7
Восемь разновидностей локальных сообщений
lpr
Система спулинга построчной печати
ma i l
Система sendmail , pos tfix и другие почтовы е программы
ma r k
Метки времени, генерируемые через одинаковые промежутки
news
Система телеконференций Usenet (устаревшая )
syslog
Внутренние сообщения демона sys logd
user
Пользовательские процессы (это установка по умолчанию, если не указано иное)
Часть 1. Основы администрирования
336
Не воспри н и майте сл и ш ком серьезно различие между сообще н и я м и систе м ы Syslog
типа a u t h и a u t h p r i v. В действительности все авторизационные сообщения явл яются
конфиде н циальн ы м и , и ни одно из н их не должно быть открытым для всеобщего досту­
па. Журн ал sudo использует a u t h p r iv.
В табл . 1 0. 3 перечислены уровни важности , существующие в системе Syslog ( в поряд­
ке убы вания важности ).
Таблица 1 0 . 3 . Уровни важности сообщений Syslog
Уровень
Приблиэитепьное значение
eme r g
Экстренные сообщения; система вышла из строя
Срочные сообщения ; требуются срочные действия
Критические состояния
Другие ошибочные состояния
Предупреждения
Необычные события, которые заслуживают внимания
Информационные сообщения
Отладочные сообщения
alert
crit
err
warning
notice
info
debug
Уровень сообще н и я определяет е го важность. Границы между разл и ч н ы м и уровн я ­
м и н есколько размыты. Существует четкое различие между событи я м и , заслуживаю­
щими внимания, и предупреждениями (а также между предупрежде н и я м и и сообщен и ­
я м и о б ошибках), но трудно однозначно разграничить значения уровней a l e rt и c r i t .
Уровн и обозначают м и н им ал ьн ую важность, которую сооб ще н и е должно и м еть
дл я того, чтобы быть заре гистрирова н н ы м . Например, сообще н и е от SSH и меющее
уровен ь важности wa r n i n g , будет соответствовать селектору a u t h . w a r n i n g , а также
сел е кторам a u t h . i n f o , a u t h . n o t i c e , a u t h . debug , * . w a r n i n g , * . n o t i c e , * . i n f o и
* . d e b u g . Если в конфигурации указано, что сообщен ия a u t h . i n f o должн ы регистр и ­
роваться в файле, т о сообщен ия a u t h . wa r n i n g тоже будут направляться в этот файл .
Этот формат также допускает с и м вол ы = и ! перед назван иями уровней , означаю­
щие "тол ько этот урове н ь " и " за исключением этого и более высоких уровн е й " соот­
ветствен но (табл . 1 0.4).
Таблица 1 0.4. Примеры использования квалификаторов уровня
Селекто р
Назначение
auth . info
Выбор почтовых сообщений уровня i n f o и выше
Выбор почтовых сообщений только уровня i n f о
Выбор почтовых сообщений уровней i n f o , n o t i c e и wa r n i n g
Выбор почтовых сообщений любого уровня, кроме w a r n i n g
auth . =info
auth . in f o ; auth . ! e r r
a u t h . debug ; a u th . ! =wa r n i n g
Поле действие определяет способ обработки сообще ния. Возможн ые варианты пе­
речислены в табл . 1 0. 5 .
Таблица 1 0 . 5 . Типичные действия
Действие
Назначение
имя_ фа йл а
Дописать сообщение в указанный файл на локальном компьютере
@имя_х о с та
Переслать сообщение демону rsyslogd, выполняющемуся
на компьютере с указанным именем
Глава 1 о. Журналирование
337
Окончание табл. 10.5
действие
Назначение
Переслать сообщение на rР_адрес по протоколу UDP, порт 5 1 4
Переслать сообщение на IР_ адрес п о протоколу ТСР, порт 5 1 4
l имя_ FIFO
Записать сообщение в указанный именованный канал•
польз о ва тель l , польз о ва тель 2 , ... Вывести сообщение на экраны терминалов указанных пользовате­
лей, если они зарегистрированы в системе
*
Вывести сообщение на экраны терминалов всех пользователей,
зарегистр ированных в системе
Игнорировать сообщение
лпроrрамма ;ша блон
Форматировать сообщение в соответствии со спецификацией
шаблон и п ослать его пр о rрамме как первый аргумент<'
@IР_адрес
@@ IР_адрес
•Для получения дополнительной информации о каналах FIFO введите команду man mk.fifo.
0 Для получения дополнительной информации о шаблонах введите команду man 5 rsyslog . conf.
Если в качестве действия задано и м я файла (или имя канала F I FO ) , то это должно
быть полное имя. При отсуrствии указанного файла демон rsys logd создает его в про­
цессе записи первого сообще н и я . П рава владен и я и разре ш е н ия для файла указа н ы
в глобальных директивах конфигурации (см . выше).
П риведем для примера несколько конфигураций , использующих традиционный син ­
таксис :
# Отпр а в и т ь с о о бщения ядр а в ф айл k e r п . l o g
kern . *
- /v a r / l o g / k e r n . l og
# Отпр а в и т ь с о о бщения Cron в файл c r o n . l o g
cron . *
/va r / l og / c r on . l o g
# Отпр а в и т ь с о общения а в т ор и з а ции в файл a u t h . l o g
auth , au t hp r i v . *
/va r / l og / a u t h . l o g
# Отпр а в и т ь в с е о с т аль ные с о о бщен и я в ф а й л s y s l o g
* . * ; a u t h , authp r iv , c r on , ke rn . none
- /var / l og/ s ys l o g
П еред де йствием имя_ ф а йл а можно ставить дефис, чтобы указать, что файловая
систем а н е должна синхронизироваться после внесения каждой жур н альной зап иси .
Синхронизация помогает сохранить как можно больше журнал ьной информации в слу­
чае сбоя , но для перегружен н ых журнальных файлов она может оказаться разруш итель­
ной с точки зрен и я производител ьности ввода-вывода. М ы рекомендуем ставить дефис
( и , следовател ьно, запрещать с инхрон изацию) по умолчани ю . Удаля йте тире только
на время, когда исследуете проблему, которая вызывает пан и ку ядра.
Устарев ш ие д ирективы
Несмотря на то что в документации по систе м е Rsyslog эти директивы н азывают­
ся устарев ш и м и , они все еще ш ироко испол ьзуются во м ногих конфигурациях Rsyslog
configurations. Устаревшие директив ы могуr конфи гурировать все асп е кты систе м ы
Rsyslog, включая глобальные параметры демонов, модули , фильтрацию и правила.
Однако на практике эти директивы чаще всего используются для настройки модулей
и самого демона rsyslogd. Документация по системе Rsyslog н е рекомендует использо­
вать устаревшие директивы для форматирования правил обработки сообще н и й , уrверж­
дая , что это " крайн е трудно сделать правил ьн о " . Для фил ьтраци и и обработки сообще­
ний следует испол ьзовать демон sysklogd или форматы RainerScript.
Параметр ы демонов и модулей очевид н ы . Например, приведе н н ые н иже параме­
тры позволяют регистраци ю по протоколам U D P и ТС Р на стандартном порту системы
Часть 1 . Основы администрирования
338
Syslog (5 1 4) . Он и также позволяют пос ылать клиентам пакеты активации, чтобы под­
держи вать соеди нения ТС Р открыты м и ; это позволяет уменьш ить стоимость восстанов­
ления соедин е н и й после завершения сеанса.
$ ModLoad i mudp
$ U D P S e rve r Run 5 1 4
$ ModLoad imtcp
$ I npu t T C P S e rve r Run 5 1 4
$ I np u t T C P S e rve r K e e pAl i ve on
Для того чтобы ввести дан н ы е пара м етры в действие, н еобходимо добавить эти
стр о к и в н о в ы й файл , которы й вкл юч ается в ос новную конфи гура ц и ю , н а п р и м ер
/etc / r syslog . d/ 1 0 -network- inputs . conf. Зате м следует заново запустить демон
rsys logd. Л юбые параметр ы , модифицирующие поведен ие модулей , должны устанав­
ли ваться после того, как модуль будет загружен .
Н е которые из устаревших директив перечисле ны в табл . 1 0.6.
Таблица 1 0 . 6 . Устаревшие параметры конфиrурации системы Rsyslog
Параметр
Описание
$ M a i nM s gQueu e S i z e
Размер буфера памяти между полученным и отосланным сообщениями•
П о умолчанию равен 8 К байт; должен быть установлен до загрузки любых моду­
лей ввода
З амещает локальное имя хоста
Указывает, где сохранить рабочие файлы системы Rsyslog
З агружает модуль
М одифицирует системный параметр no f i 1 е, заданный п о умолчанию для сис­
темы Rsyslogd
Включает дополнительные файлы конфигурации
Устанавливает флаг uma s k для новых файлов, созданных системой Rsyslogd
SMaxMe s s a g e S i z e
$ L o c a l H o s tName
$Wor kDi rectory
$ModLoad
$ M a x Ope n F i l e s
S i n c l udeCon f i g
S U МA S K
• Этот параметр полезен для медленно выполняемых действий, например для вставок в базу данных.
Синтаксис RainerScript
Си нтаксис Rai n e rSc ript
это язык обработки потока событ и й с возможностя м и
фил ьтрации и управл е н ия п отоком . Теоретически с помощью синтаксиса RainerSc ript
можно также установить основные параметры демона rsyslogd. Однако, поскол ьку не­
которые устаревшие параметр ы не и м е ют эквивалентов в си нтаксисе RainerScript , сме­
ш и вать два формата совершен но не целесообразно.
Язык RainerScript более выразительн ый и понятный дпя человека, чем устаревшие ди­
рективы демона rsyslogd, но его синтаксис принципиально отл ичается от всех извест­
ных нам систем конфигурации. На практике , работа с этим синтаксисом немного утом­
ляет. Тем не менее м ы рекомендуем е го дпя фильтрации и разработки правил обработки
сообщений. В этом разделе мы обсудим л и ш ь часть его функционал ьных возможностей .
-
Среди наш их иллюстративных систем только Ubuntu п о умолчанию использу­
ет синтаксис RainerScript в файлах конфигурации. Однако формат RainerScript
можно использовать в любых системах, в которых есть Rsyslog версии 7 и выше.
Глобальные параметры демона можно установить с помощью объекта конфиrурации
g l o b a l ( ) . Например:
gl obal (
w o r k D i r e c t o r y= " /va r / s p o o l / r s y s l o g "
maxMe s s a g e S i z e = " 8 1 9 2 "
Глава 1 0. Журналирование
339
У большинства устаревших директив есть эквиваленты в языке RainerScript , напри­
мер wo r kD i r e c t o r y и ma xMe s s a g e S i z e , приведенные выше. Эквивалентны й устарев­
ший синтаксис для этой конфиrурации выглядел бы следующим образом.
$ W o r k D i r e c t o r y / va r / s p o o l / r s ys l o g
$ MaxMe s s a ge S i z e 8 1 9 2
Кроме того, с помощью языка RainerScript можно загрузить модули и установить их
параметр ы . Н апример, чтобы за грузить модули U D P и ТС Р и прим е н ить к ним конфи­
гурацию, показанную выше, можно выполнить следующий сценарий RainerScript:
rnodu l e ( l o ad= " irnudp " )
input ( t ype = " imudp " p o r t= " 5 1 4 " )
rnodu l e ( l o ad= " imtcp " K e e pAl i v e = " on " )
input ( t ype = " im t cp " p o r t= " 5 1 4 " )
В языке RainerScript модули имеют параметры модуля и параметры ввода . М одуль
загружается только оди н раз, а параметр модуля ( например , параметр K e e pA l i ve в мо­
дуле imt c p , упомянутом выше) приме няется к модулю глобально. В отличие от это­
го, параметры ввода можно применять к одному и том у же модул ю несколько раз.
Например. м ы могл и бы приказать системе Rsys\og прослуш и вать порты ТСР 5 1 4 и 1 5 1 4:
rnodul e ( l oa d = " imt c p " KeepAl i ve = " on " )
input ( t y p e = " imt cp " p o r t= " 5 1 4 " )
input ( t ype= " imtcp " p o r t= " l 5 1 4 " )
Большая часть преимуществ систем ы RainerScript связана с возможностями фильтра­
ции. С помощью е го выражен и й можно выбирать сообщен и я . соответствующие опре­
деленным критерия м , а затем применять к ним определенное действие. Например, сле ­
дующие строки направляют сообщен ия аутентификаци и в файл /var/ log/auth . log:
if $ s y s l og f a c i l i t y- t e x t = = ' au t h ' t h e n {
a c t i on ( t yp e = " om f i l e " f i l e = " / va r / l o g / a u t h . l o g " )
В дан ном примере $ sy s log f a c i l i t y - t e x t - это свойство сообщения, т.е. часть ме­
таданных сообщения. Знак доллара, стоящий перед именем свойства, сообщает системе
Rsyslog, что это переменная. В данном случае действие заключается в том , что для запи ­
си соответствующих сообщений в файл auth . log используется модуль вывода omf i l e .
Наиболее часто используемые с войства перечислены в табл . 1 0. 7 .
Таблица 1 0 .7. Наиболее часто используемые свойства системы Rsyslog
С войство
Описание
$msg
Текст сообщения без метаданных
Полное сообщение , включая метаданные
$ r a wm s g
$ ho s t name
Имя хоста, пославшего сообщение
$ s y s l og f a c i l i t y
Источ н ик Syslog в числовой форме; см. стандарт RFC3 1 64
$ s y s l og f a c i l i t y - t e x t
Источник Syslog в текстовой форме
$ s y s l og s eve r i t y
Уровень важности Syslog в числовой форме; см . стандарт RFC3 1 64
Урове н ь важности Syslog в текстовой форме
$ s y s l og s e ve r i t y - t e x t
$ t ime g е n е r а t е d
Время получения сообщения демоном rsys logd
$ t ime r e p o r t e d
Временная метка сообщения
Часть 1. Основы администрирования
340
Фильтр может содержать нескол ько других фильтров и действий. Следующ и й фраг­
мент кода направляет сообщения ядра с разны м и уровням и важности . Он записывает
эти сообщения в файл и посылает по электрон ной почте , чтобы предупредить адми н и ­
стратора о проблеме.
modu l e ( l o a d= " omma i l " )
i f $ s y s l o g s e ve r i t y - t e x t == ' c r i t ' and $ s y s l o g f a c i l i t y- t e x t
a c t i on ( t ype = " omf i l e " f i l e = " / va r / l og / k e rn - c r i t . l o g " )
a c t i on ( t ype = " omma i l "
s e rve r= " smtp . admi n . c om"
port= " 2 5 "
mai l f r om= " r s y s l o g @ admi n . com"
ma i l t o= " b e n @ admin . com"
s ub j e c t . t e x t = " C r i t i c a l k e r n e l e r r o r "
a c t i on . e x e c o n l y o n c e e ve r yi n t e rv a l = " З б O O "
' ke rn ' t h e n {
Здесь указано, что м ы не желаем генерировать бол ьше одного сообщения электрон­
ной почти в час (3600 с ) .
Фильтрующие выраже н ия допускают использован ие регулярных выраже н и й , функ ­
ц и й и других сложных механ измов. Более подробн ы е сведе н и я о б этом можно н айти
в докуме нтации по формату RainerScript.
П ри меры кон ф и гура ционн ых ф айлов
В этом разделе показа н ы три примера конфигурации систем Rsyslog. Пе рвая это базовая , но пол ная конфигураци я , записывающая сообщен и я журналов в файлы .
Второй пример - клиент журнал ирования, пересылающий сообщен ия системы Syslog
и httpd-дocтyпa, а также журн ал ы ошибок на центральный сервер журнал ирования.
Последний пример - это соответствующий сервер жур н алирования, принимающий со­
общен ия от различных клиентов.
В этих примерах в основном используется формат RainerScript , потому что именно
он был предложен для новейшей верс и и систем ы Rsyslog. Н е которы е параметры явля­
ются корректными только в верси и Rsyslog 8 и связаны с Linuх-специфичн ы м и настрой­
ками , такими как i not i fy.
Баз овая конфигурация системы Rsyslog
Следующий файл можно ис пол ьзовать как у н и версал ь н ы й файл кон фигурац и и
rsyslog , conf в формате RainerScript в л юбой с истеме семейства Linux.
modu l e ( l o a d= " imux s oc k " )
modu l e ( l o a d= " imkl o g " )
modu l e ( l o a d= " imma r k " i n t e r va l = " 3 6 0 0 " )
# Локал ь н а я с и с т ема жур н а л о в
# Журнал ядра
# Ч а с о в а я ме т к а с о о бщений
# Н а с тройка глобаль ных пар аме т р о в r s y s l ogd
g l ob a l (
wor k D i r e c t o r y = " / va r / s p o o l / r s y s l o g "
maxMe s s a g e S i z e = " 8 1 9 2 "
# Модул ь вых одн о г о файла н е об я з а т е л ь н о з а гружа т ь я в н о ,
# но мы можем э т о сдел а т ь , ч т обы з аменить пар аме т р ы , з а д а н ные по умолч анию .
Глава 1 0. Журналирование
341
modul e ( l o ad= " b ui l t i n : om f i l e "
# Испол ь з уем т р адиционный форма т вр еме нной ме т ки
t emp l a t e = " RS Y S LOG T ra d i t i on a l F i l e Fo rma t "
# У с т а на в л и в а е м р а з р е ш е н и я п о умолчанию для в с е х журналь ных файл о в .
f i l eOwne r = " r o o t "
f i l e G r oup= " adm "
d i rOwne r = " r oot "
d i rGr oup= " adm "
f i l eC r e a t eMode= " 0 6 4 0 "
d i r C r e a t eMode= " 0 7 5 5 "
# Включаем файлы и з / e t c / r s y s l o g . d ; они н е э к в и в а л е н т н ы Ra i n e r S c r i p t
$ I nc l udeCon f i g / e t c / r s y s l o g . d / * . c o n f
Этот пример начинается с установки нескольких параметров по умолчан ию дл я де­
мона rsys logd. Код разрешения для новых журнальных файлов, заданн ы й по умолча­
нию и равн ы й 0640, устанавл ивает более строгие ограничения, чем параметр omf i l e ,
заданный п о умолчанию и равный 0644.
Сетевой клиент журналиров ания
Этот клиент жур н алирования пересылает с исте м н ы е журнал ы , параметры доступа
Apache и журнал ы ошибок на удаленный сервер с помощью протокола ТС Р.
# Посылаем в с е с о о бще ния с и с т е мы S y s l og на с е р в е р ,
# испол ь зуя с и н т а ксис s y s k l ogd
* *
@ @ l og s . admi n . c om
# imf i l e считыв а е т с о обще н и я из файла
# i n o t i f y эффе к т и в не е , чем опраши в а н и е
# Это з н ач е ни е задано по умолч анию и при в е д е н о л и ш ь для иллюс т р ации
modu l e ( l o a d= " im f i l e " mode= " i n ot i fy " )
# Импор тируем журн алы Apa c h e с п омощь ю модуля i m f i l e
input ( t ype = " imf i l e "
Tag= " apache -acce s s "
F i l e = " /va r / l o g / ap a c he 2 / a c c e s s . l o g "
S e ve r i t y= " i n f o "
input ( t yp e = " i m f i l e "
T a g = " a p a c h e - e r ro r "
F i l e = " /va r / l o g / ap a c h e 2 / e r r o r . l o g "
S e ve r i t y= " i n f o "
# Посылаем журн алы Ap a c h e l o g s н а ц е н т р ал ь ный с е р в е р журналир о в ан и я
if $ p r o g r amname c o nt a i n s ' ap a c h e ' t h e n {
a c t i on ( t y p e = " omfwd"
T a r g e t = " l o g s . a dmi n . com"
Port= " 5 1 4 "
P r o t o c o l = " t cp "
342
Часть 1. Основы администрирования
По умолчанию демон Apache httpd не зап исывает сообщения в с истему Syslog, по­
этому журнал ы доступа и ошибок считываются из текстового файла с помощью моду­
ля imfi le.6 Эти сообщения помечаются для дальнейшего испол ьзован ия в выражениях
фильтрации .
И нструкция i f представляет собой выражение фильтрации, которое ищет сообщен ия
сервера Apache и пересылает их на центральный сервер журналирования l o g s . admi n . com.
Журналы пересьтаются с помощью протокола ТС Р, коrорый, хотя и яаляется более надеж­
н ы м , чем протокол U D P, все еще может терять сообще н ия. Для гарантированной доставки
R
можно использовать нестандартный модуль вывода RELP ( eliaЫe Event Logging Protocol).
В реал ьн ых сценариях часть этой конфигураци и , связанную с сервером Apache, мож­
но записать в файл /etc/rsyslog . d/55-apache . co nf в виде фрагмента конфигурации
этого сервера.
Центральный сервер журналирования
Конфигурация соответствующего центрального сервера журнал и рования сове рш е н ­
но п роста: п рослуши ваем входящие сообщения через порт ТСР 5 1 4, фил ьтруем их п о
типу журнала и записываем файл ы в каталог журналов сайта.
# З а гружаем модуль в в ода ТСР и прослушив аем порт 5 1 4
# Количе с т в о кли е н т о в н е д олжно пре выша т ь 5 0 0
mod u l e ( l oad= " imtcp " Ma x S e s s i o n s = " 5 0 0 " )
i n p u t ( type = " imtcp " p o r t= " 5 1 4 " )
# Сохраняем р а з ные файлы в з а висимо с т и о т типа с о о бщения
i f $ p r o g r amname == ' ap a c h e - a c c e s s ' t h e n {
a c t i o n ( t yp e = " omf i l e " f i l e = " / va r / l og / s i t e / ap a c h e / a c c e s s . l o g " )
e l s e i f $ p ro g r amn ame == ' ap a c he - e r ro r ' t h e n {
a c t i o n ( t yp e = " om f i l e " f i l e = " /va r / l og / s i t e / a p a c h e / e r r o r . l o g " )
else {
# В с е о с т а л ь н о е направля е т с я в общий журнальный файл системы S y s l og
a c t i o n ( t y p e = " omf i l e " f i l e = " / va r / l og / s i t e / s y s l og " )
m Допол нительную и нформацию о конфигурациях см. в главе 23.
Центральны й сервер журнал ирования генерирует временную метку для каждого со­
общен и я во врем я е го записи. Сообщен ия сервера Apache содержат отдельную времен­
ную м етку, которая генерируется , когда демон httpd регистрирует сообщение. Обе эти
метки заносятся в общие журнальные файлы .
Сообщения защиты системы Syslog
Систе м а Rsyslog может отправл ять и получать сообщения журнала через TLS, уро­
вен ь ш ифрования и аутентификации , работающий по протоколу ТСР. Общую информа­
цию об уровне TLS см. в разделе 27 .6.
В приведе н ном н и же примере предполагается , что це нтр сертификаци и , общедо­
ступные сертификаты и кл ючи уже созданы. Для получ е н ия подробной информации
об и нфраструктуре открытого ключа и создании сертификатов см. раздел 27.6.
Эта конфигурация представляет новую опцию: драйвер сетевого потока, модуль, ра­
ботающий на уровне м ежду сетью и системой Rsyslog. Он обычно реал изует фун кци и ,
6 Демон h t tpd может вести журнал н епосредствен но в системе Syslog с помощью модуля mod_
sysloq, но мы используем модуль illlf i le дпя иллюстрации .
глава 1 0. Журналирование
343
которые улучшают основные сетевые возможности . Уровен ь TLS подключается драйве ­
ром потока g t l s .
Следующий при мер позволяет использовать драйвер g t l s дл я журнального сервера.
Для драйвера g t l s требуется сертификат СА, открытый сертификат и закрыты й кл юч
сервера. Затем модул ь imt cp включает драйвер потока g t l s .
g l ob a l (
d e f a u l t Ne t s t r e amD r i ve r = " g t l s "
d e f a u l t Ne t s t r e amD r i v e r CAFi l e = " / e t c / s s l / c a / a dmi n . com . pem"
d e f a u l t Ne t s t r e amD r i ve r Ce r t Fi l e = " / e t c / s s l / c e r t s / s e rv e r . com . p em"
d e f a u l t Ne t s t r e amD r i ve r K e y Fi l e = " / e t c / s s l / p r iva t e / s e rv e r . c om . ke y "
modul e (
l o ad= " imt cp "
s t r e amDr i ve r . n ame = " g t l s "
s t r e am D r i ve r . mode = " l "
s t r e amD r i ve r . a u thMode = " x 5 0 9 / name "
input ( t yp e = " i mt c p " p o r t = " 6 5 1 4 " )
Сервер журнала прослушивает ТLS-версию стандартн ого порта с истем ы Syslog, 65 1 4.
Параметр a u t hMode сообщает системе Syslog, какой тип проверки должен выполняться .
Параметр x 5 0 9 / name , заданн ы й по умолчанию, подразумевает проверку того факта, что
сертификат подписан доверен н ы м органом , а также проверяет и м я субъекта, которое
связывает сертификат с кон кретным клиентом через систему D N S .
Конфигурация дл я кл и ентской сторон ы ТLS -соединения аналогич на. Испол ьзу йте
сертификат кл и е нта, закрыты й ключ и драйвер потока gtl s для перес ылки журналов
с ПОМОЩЬЮ модуля вывода.
g l oba l (
d e f a u l t N e t s t r e amD r i ve r = " g t l s "
d e f a u l t N e t s t re amD r i ve rCAFi l e = " / e t c / s s l / c a / a dmi n . c om . pem"
d e f a u l tNe t s t r e amD r i ve r Ce r t Fi l e = " / e t c / s s l / c e r t s / c l i e n t . com . pem"
de f a u l t Ne t s t r e amD r i ve r K e y F i l e= " / e t c / s s l / p r iva t e / c l i e n t . com . ke y "
*
*
a c t i on ( t y p e = " omfwd "
P r o t o c o l = " t cp "
T a r g e t = " l o g s . a dmi n . com"
P o r t= " 6 5 1 4 "
S t r e amDrive rMode= " l "
S t r e amDr i ve r= " g t l s "
S t r e amDrive rAu t hMode= " x 5 0 9 / n ame "
В дан ном случае м ы пересылаем все журнал ьн ы е сообщен и я с помощью довол ьно
искусствен ного синтаксиса демона sysklogd: ком понент действия и меет форму с и н ­
таксиса RainerScript, а не стандартного с интаксиса демона sysklogd. Если в ы хотите
выбирать, какие сообщения пересылать ( или вам нужно отправлять разные классы со­
общен и й в разные адреса ) , вы можете и спол ьзовать выраже н и я фильтра RainerScript ,
как показано в нескольких примерах ранее в этой главе .
Отладка системы Syslog
Команда logger позволяет выдавать журнальные сообщения в сценариях и нтерпре­
татора команд. Кроме того, эту команду можно использовать для проверки измене н и й
Часть 1. Основы администрирования
344
в конфигурационном файле систе м ы Rsysog. Например, если в файл была добавлена
строка
l o c a l 5 . wa r n i n g
/ tmp / evi . l og
и нужно убедиться в том , что она работает, введите такую команду.
$ loqqer
-
р local S . warninq " te s t me s s aqe "
Строка, содержащая фразу t e s t me s s a g e (тестовое сообщение), должна быть запи­
сана в файл / t.mp/evi . log. Есл и этого не произошло, то, возможно, вы забыли переза­
пустить демон rsyslog?
1 0.4. ЖУРНАЛЬНАЯ РЕГИСТРАЦИЯ НА УРОВНЕ ЯДРА
И НА ЭТАПЕ НАЧАЛЬНОЙ ЗАГРУЗКИ
Ядро и сценарии запуска систе м ы представля ют собой немалую проблему с точ ки
зрен и я журнал ьной регистрации. В первом случае проблема заключается в том , чтобы
средства регистраци и событий , происходящих на этапе начальной загрузки и в ядре , не
зависели от типа файловой систе м ы и ее орган изации . Во втором случае трудность со­
стоит в последовател ьной регистрации событ и й , происходящих в сценариях, а не в си­
сте м н ых демонах ил и других программах, - их сообще н и я должны ре гистрироваться
на другом уровне. Н еобходимо также избежать ненужного дублирован ия зап исей в сце­
нариях и переадресации их вывода.
П ервая из описанных п роблем решается путе м создания внутрен н е го буфера огра­
н ич е нного размера, куда ядро заносит свои журнал ьные сообщения. Этот буфер доста­
точ но вел и к для того, чтобы вместить сообщения обо всех действиях, предпринимаемых
ядром на этапе начальной загрузки. Когда система полностью загрузится, пол ьзователь­
ский процесс сможет получ ить доступ к журнал ьному буферу ядра и с копировать е го
содержимое в нужное место.
В с истемах Linux де мон sys temd- j ournald извлекает сообщения ядра
из буфера ядра , сч иты вая файл устройства / dev / km s g . Эти сообще н и я
можно увидеть, выпол н и в команду j ourna l c t l - k ил и ее псевдон и м ,
j ournalctl - -dmesg. Кроме того, можно использовать традиционную ко­
манду dmesg .
В с истеме Free B S D и старых версиях Linux луч ш и м средством для просмо­
тра буфера ядра я вляется команда dmesg; ее вывод содержит даже сообще­
н и я , которые были сгенерированы до начала выполнения процесса ini t.
Другой важ н ы й момент, с вязан н ы й с журнальной регистрацией н а уровне ядра, ка­
сается правил ьного управл е н ия систе м ной консол ью. Важно, чтобы по ходу загрузки
систе м ы вся вы водимая информация попадала на консол ь. С другой сторон ы , когда си­
сте ма загрузилась и начала выпол н яться, консольные сообщения больше раздражают,
нежели помогают, особен н о если консол ь испол ьзуется для регистрации в системе.
В с истеме Linux команда dme sg позволяет указывать в командной строке уровен ь
важности консол ьн ых сообщен и й ядра.
ubu n t u $ sudo dmesq -n 2
Сообще н и я уровня 7 наиболее информати вны и вкл ючают отладоч ную и нформа­
цию. К первому уровню относятся тол ько сообще ния о фатал ьн ых ош ибках систем ы
(чем ниже уровен ь, тем выше важность сообщений). Все сообщения, выдаваемые ядром,
Глава 1 О. Журналирование
345
продолжают п оступать в журнал ь н ы й буфер (а также в систе м у Syslog) независимо
от того, направляются они на консоль или нет.
1 0.5. УПРАВЛЕНИЕ ЖУРНАЛЬНЫМИ ФАЙЛАМИ И ИХ РОТАЦИЯ
Утилита logrotate, разработанная Эриком Троаном ( Erik Troan}, реализует различ­
ные схемы управления журнальными файлами и является частью всех рассматри ваемых
нами дистрибутивов Linux. Она также выполняется в системе Free B S D , но для этого вам
придется и нсталлировать ее на нескольких портах. По умолчанию система Fre e B S D ис­
пользует другой пакет ротации журналов под названием newsyslog; е го подробное опи­
сан ие можно найти немного н иже.
Утил ита logrotate: кросс - платформен ное
управление журналами
Конфигурация утилиты logrotate состоит из набора спецификаций для групп жур ­
нальных файлов, которым и следует управлять. Параметры, определенные в н е какой-ли­
бо спецификации ( например, e r r o r s , r o t a t e и we e k l y в показанном н иже примере},
являются глобальными. И х можно переопределять для конкретного журнального файла,
а также указывать несколько раз в различных частях файла, меняя стандартные установки.
Ниже представлен несколько искусствен н ы й пример такого файла.
# Глобаль н ы е параме тр ы
e r r o r s e r r o r s @ b oo k . a dmi n . c om
rotate 5
we e k l y
# Определения и параме тры р о тации журнал ь н ых файлов
/ va r / l o g / me s s a g e s {
postrotate
/ bi n / k i l l - H U P ' ca t / va r / r un / s y s l ogd . pi d '
ends c r i p t
/va r / l o g / s amba / * . l o g
n o t i f e mp t y
copy t ru n c a t e
sharedscripts
postrotate
/b i n / ki l l - H U P ' ca t / va r / l o c k / s amЬ a / * . p i d '
ends c r i p t
В это й конфи гурации р а з в недел ю осуществляется ротация файла /var / l o g /
me s sage s . Сохраняются пять последовательных версий файла, а демон syslogd уве­
домляется о каждом шаге ротации. Журнальные файлы систем ы Samba (их может быть
нескол ько) также подвергаются ротации каждую неделю, но в место того чтобы последо­
вательно перемещать файл ы , а затем создавать новый начальный файл, сценарий после­
довательно коп ирует журнальные файлы , усекая первы й . Сигнал HU P посылается демо­
нам Samba только после того, как произойдет ротация всех журнальных файлов.
Н аиболее полезные параметры файла logrotate . conf перечислены в табл. 1 0. 8 .
Часть 1 . Основы администрирования
346
Таблица 1 0 . 8 . Параметр�.� утилиты logrotate
Назначение
Опци•
c omp re s s
dailу ,
Сжимать все версии журнального файла, кроме текущей
w e e kl у ,
топ t h l у
Осуществлять ротацию журнальных файлов ежедневно, еженедельно
или ежемесячно
d e l a ycomp r e s s
Сжимать все версии журнального файла, кроме текущей и предыдущей
endscript
Этот параметр помечает конец блоков prerotate и pos trotate
e r r o r s почтовый_ а др е с
Направлять сообщения об ошибках по указанному адресу
mi s s i n g o k
Не выдавать предупреждений о б отсутствии журнального файла
n o t i femp t y
Не осуществлять ротацию журнального файла, если о н пуст
o l d d i r к а та лог
П омещать старые версии журнального файла в указанный каталог
post rotate
Этот параметр помечает начало блока команд, выполняемых после ро ­
тации журнального файла
pre rotate
Этот параметр помечает начало блока команд, выполняемых перед ротацией журнального файла
r o t a te
п
Включать в цикл ротации указанное число версий журнального файла
sharedscripts
Запускать сценарии один раз для всей групп ы журнальных файлов
s i z e порог
Выполнять ротацию, если размер журнального файла превышает порог
(например, 1 00 Кбайт, 4 Мбайт)
Утил ита logrotate обы ч н о :3апус кается демоном cron раз в ден ь. Ее стандарт н ы й
конфи гурацион н ы й фа йл называется /etc/logrotate . conf, но в командной строке
можно указывать сразу нес кол ько файлов ( ил и каталогов, содержащих конфигурацион­
н ые файл ы ) .
Эта особен ность широко испол ьзуется в дистрибутивах Linux, в которых каталог /etc/
logrotate . d определен как стандартное место хранения конфигурационн ых файлов ути ­
литы logrotate. П рограммные пакеты , поддерживающие эту утилиту ( а таковых немало) ,
при инсталл я ции выбирают схему журнальной регистрации , что существен но упрощает их
администрирование.
П араметр d e l a y c o mp r e s s заслужи вает допол н ител ьных разъяс н е н и й . Н е которые
приложе н и я даже после ротации некоторое вре мя продолжают записы вать сообще н и я
в предыдущий журн ал ьн ы й фа йл . П араметр d e l a y c omp r e s s предназначен дпя того,
чтобы отложить сжатие на оди н цикл ротаци и . Этот параметр приводит к воз н и кнове­
нию трех типов журнальных фа йлов: актив н ы й жур н ал ьн ы й файл , файл с предыдуще й
ротаци и , но е щ е не сжатый, и сжаты й файл после ротации .
Кроме утилиты logrotate , дистрибутив Ubuntu вкл ючает также более про­
стую програ м м у savelog, которая управляет ротацией отдельн ых файлов.
О на п роще утил иты l ogrotate и не испол ьзует конфи гурацион н ы й файл
(да и не нуждается в н е м ) . В некоторых пакетах предпочтен ие отдается соб­
стве н н ы м конфигурация м , создаваем ы м с помощью утилиты savelog, а не
определен н ы м утилитой logrotate.
Утил и та newsysloq: у п равлен ие журналами в системе FreeBSD
И мя newsys log может ввести в заблужден и е . Утилита была названа так потому, что
изначал ьно б ыла предназна ч е н а для ротации файлов, управляемых системой Syslog.
В систе ме Free B S D она я вл яется экви валентом утилиты logrotate. Ее синтаксис и ре-
Глава 1 О. Журналирование
347
ализация принципиально отличаются от синтаксиса и реализации утилиты logrotate,
но, есл и не учиты вать несколько н е п р и вы ч н ы й формат даты , с интакс ис утил иты
newsyslog в чем-то даже проще.
Основны м файлом конфигурации я вляется файл / etc/newsy s l og . conf. Формат
и синтаксис утилиты newsyslog описаны на справочной странице man newsyslog. По
умолчанию файл /etc/newsys log . conf содержит примеры стандартных журнальных
файлов.
Как и l ogro tate , утилита newsyslog запускается демоном cron. В простейшей
конфигурации систе м ы FreeBSD файл / e tc / crontab содержит строку, которая запу­
скает утилиту newsyslog каждый час.
1 0.6. УПРАВЛЕНИЕ ЖУРНАЛАМИ В КРУПНОМ МАСШТАБЕ
Одно дело - зап исывать журнальные сообщения, хранить их на диске и пересылать
на центральный сервер. Другое дело - обрабатывать данные регистрации сотен или ты­
сяч серверов. Объемы сообщений просто слишком велики дЛЯ эффективного управления
без инструментов, предназначенных дЛЯ работы в этом масштабе. К счастью, дЛЯ решения
этой проблемы доступны несколько коммерческих и открытых и нструментов.
Стек ELK
Я вн ы м л идером в области программного обеспечения с открытым исход н ы м ко­
дом - и действительно одн и м из лучш и х пакетов программ ного обеспечения, с кото­
рыми мы с удовольствием работаем , - я вляется мощный стек E LK, состоящий из и н ­
струме нтов Elasticsearch, Logstash и Kibana. Эта комбинация инструментов позволяет
сортировать, искать, анал изировать и визуализировать большие объем ы журнальных
данных, создаваем ых глобальной сетью клиентов регистрации . Стек ELK создан компа­
нией Elastic ( e l a s t i c . с о ) , которая также предЛагает обучение, поддержку и корпора­
тивные надстройки дЛЯ E LK.
Elasticsearch - это масштабируемая база данн ых и поисковая система с интерфейсом
прикладного программ ирован ия R ESTful дЛЯ запроса данн ых. Она написана на языке
Java. Установки Elasticsearch могут варьироваться от одного хоста, которы й обрабатывает
низкий объем данных, до нескол ьких десятков хостов в кластере, который и ндексирует
много тысяч событий каждую секунду. Поиск и анализ журнальных данн ых является од­
ним из самых популярных приложений дЛЯ Elasticsearch.
Если поисковая система E\asticsearch я вляется основны м инструментом стека ELK,
то кон вейер обработки дан н ых Logstash является его союзн иком и доверен н ы м пар­
тнеро м . Кон вейер Logstash при н имает данные из м ногих источ н иков , включая системы
массового обслуживан ия, такие как Rabblt MQ и AWS SQS. О н также может считывать
дан ные непосредственно из сокетов ТС Р ил и U D P и традиц ион ного протокола систе­
мы Syslog. Кон вейер Logstash может анализировать сообщения дЛЯ добавления допол­
н ительных структурированных полей и отфильтровывать нежелательные или несоот­
ветствующие данные. Когда сообщения попадают в сеть, Logstash может записывать их
в самые разные пун кты назначения , включая , конечно, Elasticsearch.
Вы можете отправлять записи журнала в кон вейер Logstash различными способами .
Вы можете настроить вход кон вейера Logstash н а систему Syslog и использовать модуль
вывода omfwd системы Rsyslog, как описано в конфигурации Rsyslog в разделе 1 0. 3 . Вы
также можете испол ьзовать выдел е н н ы й отправитель журналов. Собствен ная версия
348
Часть 1. Основы администрирования
Elastic называется Filebeat и может отправлять жур нал ы л ибо в Logstash , л ибо непосред­
ственно в Elasticsearch.
П оследн и й ком п о н е н т E L K , Kibana , я вл я етс я граф и ч е с к и м и н терфе й с о м
для Elasticsearch. Он предоставляет и нтерфейс поиска, с помощью котороrо можно най­
ти записи , которые вам н ужн ы , среди всех дан н ы х , которые были проиндексированы
поисковой системой Elasticsearch. И нтерфейс Кibana может создавать графики и ви­
зуал и зац и и , которые помогают ге н ерировать новые сведе ния о ваш их приложениях.
Можно, например, отобразить события журнала на карте, чтобы увидеть географически
то, что происходит с ваши м и с истемами . Друrие допол н ител ьные модули добавл я ют
оповещения и интерфейсы мониторинrа системы.
Разумеется , E L K не обходится без эксплуатацион ной нагрузки . П остроен ие крупно­
масштабноrо Е LК-стека с настраиваемой конфигурацией - непростая задача , и управ­
ление ею требует времени и оп ыта. Больши нству адм и н истраторов, которых мы знаем
(включая нас ! ) , приходилось случайно терять дан ные из-за ошибок в программном обе­
спеч е н и и или при его эксплуатации. Если вы реш ите развернуть E L K , имейте в виду,
что вы соглашаетесь на знач ительные адми н истративные издержки .
Нам известна по крайней мере одна служба, l o g z . i o , предлагающая услуrу E L K
н а уровне производства. В ы можете отправлять сообщения журнала и з своей сети п о за­
шифрова н н ы м каналам в конеч ную точку, которую предоставляет l o g z . i o . Там со­
общения ре гистрируются, и ндексируются и становятся доступ н ы м и через и нтерфейс
Кibana. Это довол ьно дорогое решение, но его стоит оценить. Как и во многих облач ных
службах, вы можете обнаружить, что в конечном итоге реплицировать службу локал ьно
обойдется дороже .
G raylog
G raylog - аутсайдер по сравнен и ю с пакетом ELK. Он похож на стек E LK: он тоже
хран ит дан ные в базе данных Elasticsearch и может принимать сообщения журнала на­
прямую или через кон вейер Logstash , как и в стеке E L K. Реал ьн ы м отличием я вляет­
ся пол ьзовател ьски й и нтерфейс G raylog, который м ногие пол ьзовател и считают более
удачн ы м и простым в использован и и .
Н е которые из платн ых продуктов ELK реализован ы в Graylog как программ ы с от­
крытым исходным кодом , включая поддержку ролевоrо контроля доступа и и нтеграцию
с LDAP.
С истема G raylog, безусловно, заслуживает вн иман ия , когда вы выбираете новую ин­
фраструктуру журналирования.
W Дополнител ьную и нформацию о RBAC и LDAP см. в разделах 3 . 4 и 1 7. 2 .
Журнал и рова ние как услуга
Существует несколько коммерческих предложений по управлению журналами. Самым
зрел ым и надежным инструментом я вляется Splunk; и меющий как верс и и , развернутые
на виртуальном хосте, так и локальные версии. Некоторые из крупнейших корпоративн ых
сетей используют Splunk не только как менеджер журналов, но и как с истему бизнес-ана­
л итики. Но если вы выберете Splunk, будьте rотовы заплатить за эту привилегию.
Альтернативные опции SaaS вкл ючают Sumo Logic , Loggly и Papert ra i l , и меющие
встроенную и нтеграцию с истемы Syslog и разумный интерфейс поиска. Если вы испол ь­
зуете AWS , то служба Amazon Cloud\Vcitch Logs сможет собирать дан ные журналов как из
служб AWS , так и из ваш их собствен н ых приложений.
Глава 1 0. Журналирование
349
1 0.7. П РИНЦИПЫ ОБРАБОТКИ ЖУРНАЛЬНЫХ ФАЙЛОВ
За прош едшие годы ре гистрацион ные события вышли из области с исте м ного ад­
министрирования и пре вратились в сложно решаемые проблемы в сфере управления
события м и на уровне предприятий . Обработка событий , связанн ы х с безопасностью,
стандарты и нформационных технологий и законодательные акты могут потребовать це­
лостного и систематического подхода к управлению дан н ы м и регистрации.
Данные журналов регистрации от одной систе м ы создают относительно небольшую
нагрузку на устройства хранения, но ведение централизованного журнала регистрации
событий от сотен серверов и десятков приложен и й - совсем другая история . В основ­
ном благодаря критически важной природе веб-служб журнал ы регистраци и , создавае­
мые приложениями и демонами , по значимости вышли на уровен ь журналов регистра­
ции , генерируемых операционными системам и .
Разрабаты вая стратегию обработки журнал ьных файлов, ответьте н а следующие вопросы .
•
Сколько систем и приложений вы предполагаете использовать?
•
И нфраструктура хране н ия и нформации какого типа вам доступна?
•
Как долго вы собираетесь хранить журналы регистрации?
•
Какого типа события являются для вас значимыми?
Ответы на эти вопросы зависят от требовани й , предъявляемых к бизнесу, и от при­
меняемых вам и стандартов или нормативных докуме нтов. Наприм е р , оди н стандарт
от Совета по стандартам безопасности индустрии платежных карт ( Payment Card Industry
Security Standards Council - PCI SSC) требует, чтобы журнал ы ре гистрации хранились
на носителе с п ростым доступом к дан н ы м (например, это может быть локально мон­
тируемый жесткий диск) в течение трех месяцев и архивировались для долговременного
хранения в течение по крайней мере одного года. Кроме того, этот же стандарт включа­
ет конкретные требования к типам используемых данн ых.
Конечно, как заметил один из наших рецензентов, нел ьзя затребовать в суде данные
журнала, которых у вас нет. По этой причине некоторые организации не собирают (ил и
намере нно уничтожают) конфиденциальные данные журнала. В ы можете испол ьзовать
этот подход или нет в зависимости от юридических норм, которые к вам применяются.
Как бы вы н и ответили на поставленные выше вопросы , обязательно соберите вход­
ную и нформацию из отделов по соблюдению правил и информацион ной безопасности,
если они есть в вашей организации .
Для большинства приложений обычно рассматривают сбор как м и нимум следующей
информации :
•
имя пользователя или его идентификатор ( I D) ;
•
результат обработки события (успешная или нет) ;
•
адрес источника для сетевых событий ;
•
дата и время ( и з такого официального источника, как NTP) ;
•
оповещение о добавлении, изменении или удалении важных данных;
•
подробные данные о событии.
W Дополнительную информацию о RAI D см . в разделе 20 . 8 .
3 50
Часть 1. Основы администрирования
Сервер журналирования должен работать в соответствии с тщательно разработанной
стратегией хранен ия и н формаци и . Например, облач н ы е с исте м ы предлагают немед­
ленный доступ к данн ы м , собра н н ы м за последние 90 дней , службы объектн ых храни­
лищ - за год, наконец, архивные службы - за три года. Требования к хране н и ю данных
мoryr со временем меняться , и реали зация может легко и успешно адаптироваться к из­
мене н и ю этих услови й.
Доступ к централ изирова н н ы м серверам журнал ирования должен быть ограничен
систе м н ы м и адми н истраторами высокого уровн я , программами и персоналом , задей ­
ствован н ы м в реше н и и вопросов безопас ности и адрес ной совместимости . В рам ках
организаци й эти с исте м ы обычно не и грают главную рол ь при при нятии ежедневн ых
решений за рамками удовлетворе ния требова н и й к возможности проведен ия аудита, по­
этому адми н истраторы приложе н и й , конечные пол ьзователи и служба технической под­
держки не имеют доступа к н и м . Доступ к журнальн ым файлам на центральных серве­
рах должен регистрироваться отдельно.
Организация централизованного журнал ирования требует определе нных усил и й , и в
небольш их с истемах она может не продемонстрировать преи мущества от испол ьзования
сети. Для обеспечения централ изации м ы предлагаем в качестве разумной пороговой
вел и ч и н ы испол ьзовать двадцать серверов. При меньшем кол ичестве необходимо га­
рантировать, что журналы регистрации подвергаются надлежащей ротации и архивиро­
вани ю с частото й , достаточной для того, чтобы избежать запол н е н ия диска. В ключите
журнальные файлы в с истему мон иторинга, чтобы получать извещения, если некоторы й
журнальный файл перестанет увеличиваться в размере .
глава
11
Драйверы и ядро
Ядро - это главная часть операционн ых систем U N IX и Linux. О н о устанавл ивает
правила, распределяет ресурсы и предоставляет пользовател я м основ н ы е услуги .
Функции ядра воспринимаются пользователями как нечто само собой разумеющееся .
Это хорошо, потому что такие простые команды, как cat /etc/pas swd на самом деле
скрывают сложные последовательности базовых действий. Н ап р и м ер управляя самоле­
том , намного удобнее оперировать командами " подняться на высоту 35000 футов " , чем
тысячами мелких шагов, которые необходимо сделать, чтобы выполнить эту команду.
Ядро скрывает детали устройства аппаратного обе с п е ч е н и я с исте м ы за абстра кт н ы м
высокоуровневым и нтерфейсом . Он очень похож на и нтерфейс п р и кл ад ного програм­
мирования , обеспечивающий полезные функции вза и моде йст в и я с с истемой . В ч аст н о ­
сти , этот и нтерфейс обеспечивает пять основн ых функций.
,
•
Управление и абстрагирование аппаратного обеспечения.
•
Процессы и потоки , а также способы взаимодействия между н и м и ,
•
Управление памятью (виртуальная память и защита областей па м яти )
•
Функции ввода-вывода (файловые систе м ы , сете в ы е и нтерфейс ы , последовател ь­
ные интерфейсы и т.д. ) .
•
.
Организационн ые функции ( начало и завершение работы , тай меры , м ногозадач­
ность и т.д. ) .
352
Часть 1. Основы администрирования
Тол ько драй веры устройств знают о конкретных возможностях и протоколах связи
аппаратного обеспечения системы. Пользовательские программ ы и остальная часть ядра
в значительной степени не зависят от этих знаний. Например, файловая система на диске
сил ьно отличается от сетевой файловой системы, но уровен ь VFS ядра делает их похожи­
м и на пользовательские процессы и на другие части ядра. Вам не нужно знать, направля­
ются ли дан н ы е , которые вы записываете , в блок 3829 дискового устройства №8 или же
он направляется на Еthеmеt-и нтерфейс е \ ОООе, упакованный в ТС Р-пакет. Все, что вам
нужно знать, это эти дан ные будут направлены в указанный вами файловый дескриптор.
П роцессы (и потоки , их упрощенные аналоги) - это механ изм ы , благодаря которым
ядро организовывает совместное использова н ие централ ьн ого процессора и защиту па­
мяти. Ядро плавно перекл ючается между процессами системы, вьщеляя каждому выпол­
няемому потоку небольшой отрезок времени , в котором необходимо выполн ить работу.
Ядро запрещает процессам ч итать и записывать дан ные в памяти друг друга , есл и у н их
нет я вного разрешения на это.
Система управления памятью определяет адресное пространство для каждого процес­
са и создает иллюзи ю , что процессу принадлежит практически неограничен ная область
смежной памяти. На самом деле страницы памяти разных процессов смешан ы в физиче­
ской памяти с истемы. Их упорядочи вают только схемы хранения и защиты памяти ядра.
Устройства ввода - в ы вода образуют урове н ь, рас положе н н ы й в ы ш е дра й веров
устройств, но н иже бол ьш инства других частей ядра. Они состоят и з служб файловой
систе м ы , сетевой подсисте м ы и различн ых других служб, которые используются для об­
мена дан н ы м и с системой.
1 1 . 1 . ЯДРА И СИСТЕМНОЕ АДМИНИСТРИРОВАНИЕ
П очти все м ногоуровневые функции ядра написаны на языке С с н ебольш ими встав­
кам и кода на языке ассемблера для обеспечения доступа к фун кциям п роцессора, ко­
торые н едосту п н ы с помощью директив ком п ил ятора языка С ( например, атомарн ые
и нструкции чте н ия , модификации и зап и с и , определен н ые м ногими це нтрал ь н ы м и
процессора м и ) . К счастью, вы можете быть совершенно эффе ктив н ы м систе м н ы м ад­
министратором , не будуч и програм м истом на языке С и не касаясь кода ядра.
Тем н е менее неизбежно, что в какой-то момент вам н ужно будет нем ного порабо­
тать. Эта работа может прини мать нескол ько форм.
М ногие и з задач ядра ( напри мер, переадресация сетевых пакетов) зависят от пара­
метров настройки, доступн ых из пол ьзовател ьского пространства. Установка этих зна­
чений для вашей среды и рабочей нагрузки я вляется общей адм ин истративной задачей.
Другой общей задаче й , связа н н о й с ядром , я вляется установка новых драйве­
ров устройств. Н а р ы н ке постоя н но появля ются новые модели и типы оборудования
(видеокарты , беспроводн ые устройства, специал изирован ные звуковые карты и т.д. ) ,
а ядра, поставляемые поставщиками , н е всегда с пособ н ы и х испол ьзовать.
В некоторых случаях вам может понадобиться также создать новую верс ию ядра из
исходного кода. Систе м н ы м адм и н истраторам не н ужно строить ядра так часто, как
раньше, но в некоторых ситуациях это имеет см ысл . Это проще, чем кажется.
Ядра сложны . На удивление легко дестабилизировать ядро с помощью даже незначи­
тел ьных изменений. Даже есл и ядро просто загружается , оно может работать не так, как
должно. Что еще хуже, вы не поймете , что производительность сн изилась, есл и у вас нет
структурированного плана оце н ки резул ьтатов ваше й работы. Будьте консервативны,
изменяя ядра, особен но в производствен н ых системах, и всегда имейте план резервного
коп ирования для возврата к хорошо известной конфи гураци и .
Глава 1 1 . Драйверы и ядро
353
1 1 .2. НУМЕРАЦИЯ ВЕРСИЙ ЯДРА
Прежде чем м ы погрузимся в глуб и н ы ядер, стоит потратить несколько слов, чтобы
обсудить верси и ядра и их связь с дистрибутивами .
Активная разработка ядер Linux и FreeBS D не прекращается н и на день. С о временем
исправляются дефекты, добавляются новы е функции и удаляются устаревшие функции .
Некоторые старые ядра продолжают поддерживаться в течение м ительного периода
времени. Аналогично н е которые дистрибутивы предпочитают подчеркивать стабиль­
ность и, следовательно, запус кают более старые, более проверен н ы е ядра. Другие дис­
трибутивы пытаются преможить самую последнюю поддержку и функции устройства ,
но в результате могут быть немного менее стабил ь н ы м и . Администратор должен вы­
брать один из этих вариантов таким образом, чтобы он соответствовал потребностям ва­
ших пользователей. Ни одно решение не подходит мя любого контекста.
Версии ядер для системы Li nux
Ядро Linux и дистрибутивы, основанные н а нем , разрабатываются отдельно
от другого, поэтому у ядра есть своя схема управления версиям и . Некоторые
выпуски ядра достигают известной популярности , поэтому нет н ичего нео­
быч ного в том , что несколько независимых дистрибутивов используют одно
и то же ядро. Чтобы узнать, в каком ядре работает дан ная с истема, выпол ­
н ите кЬманду uname - r .
Ядра Linux называются в соответствии с правилами так называемого семантическо­
го управления версиям и , т.е . они включают в себя три ком понента: основную версию,
второстепенную версию и уровен ь заплатки. В настоящее врем я не существует предска­
зуемой связи между номером версии и ее предполагаем ы м статусом как стабил ьны м или
экспериментал ьн ы м ; ядра называются стабильными, когда разработчики решают, что
они стабил ьны . Кроме того, основной номер версии ядра исторически устанавл ивался
по несколько причумивым правилам.
М ногие стабильные верси и ядра Linux могут одновременно находиться в долгосроч­
ной эксплуатаци и . Ядра, поставляемые вместе с круп н ы м и дистрибутивами Linux, ча­
сто значительно отстают от последних выпус ков. В некоторых дистрибути вах даже есть
ядра, которые официально устарели .
Вы можете установить новые ядра путем компиляции и установки из исходного де­
рева ядра. Одна ко мы не рекомендуем вам это делать. Различные дистрибутивы и меют
разные цел и , и он и выбирают верс и и ядра, соответствующие этим целям. Вы н икогда
не знаете , что дистрибутив не выбирает новое ядро из-за какой-то конкретной пробле­
мы. Если вам нужно более новое ядро, установите дистрибутив, созданный вокруг этого
ядра, вместо того, чтобы пытаться внедрить новое ядро в существующую систему.
W Дополни тельную информацию о семантич еском управл е н и и версия м и см. на сайте
s emve r . o r g .
Версии ядер FreeBSD
Система Free B S D испол ьзует довольно простой подход к версиям и выпу­
скам. Проект поддерживает две основные производствен н ые верс и и , кото­
рые на момент выхода русского издания книги явл яются версиями 1 2 и 1 3 .
Ядро не имеет отдельной схемы управления версиям и ; оно выпускается как
часть полной операционной с исте м ы и имеет тот же номер версии.
3 54
часть 1. Основы администрирования
Более старый из двух основных выпусков (в данном случае Free B S D 1 2) можно рас­
сматривать как текущую версию. О н не содержит новых функций и делает упор на ста­
бил ьности и безопасности.
Более поЗдняя версия ( Free B S D 1 3) прямо сейчас находится на стадии активной раз­
работки . Она также и меет стабильные верс и и , предназнач е н н ые для общего исполь­
зован и я , но код этого ядра всегда будет более новым и несколько м е нее проверенным
по сравнению с предыдущей основной версией.
Как правило, подверс и и (dot version) поя вля ются примерно каждые четыре ме­
сяuа. Основн ые выпуски явно поддерживаются в течение пяти лет, а подверсии вну­
три н их поддерживаются в течение трех месяцев после выхода следующей подверси и .
Полдверси и быстро устаревают; система FreeBS D предполагает, что пол ьзователи будут
обн овлять ее с помощью заплаток.
1 1 .3 . УСТРОЙСТВА И ИХ ДРАЙВЕРЫ
Драйвер устройства - это уровень абстракци и , которы й управляет взаимодействием
систем ы с конкретны м типом аппаратного обеспечения, так что остальная часть ядра
не должна знать ее специфику. Драйвер выпол няет перевод ап паратных команд, по­
н и маемых устройство м , и стили зованным программ н ы м и нтерфейсом , определен н ы м
( и испол ьзуемым) ядром . Уровень драйвера помогает сохран ить бол ьшую часть незави­
с имого от ядра устройства.
Учитывая быстрые тем п ы разработки нового оборудования , практически невозмож­
но постоянно обновлять дистрибутивы основной операционной систе м ы , чтобы иметь
возможность использовать новейшее оборудование. Следовательно, вам иногда потребу­
ется добавить драйвер устройства в свою систему для поддержки нового оборудования.
В каждой системе можно и нсталлировать только "свои" драйверы , причем зачастую
тол ько те , которые разработан ы специально для конкретной верси и ядра. Драйверы
для других операционных систем (например, Windows) работать не будут. Об этом следу­
ет помн ить, покупая новое оборудование. Кроме того, различные устройства в разл и ч ­
ной степени совместимы с дистрибутивами Linux и при работе в е е среде могут предо­
ставлять разл ич н ые функциональные возможности. П оэтому, выбирая оборудование,
следует учитывать опыт его применения в других организациях.
Изготовител и оборудован и я обращают все бол ьше внимания н а рынки Free B S D
и Linux и часто выпус кают драйверы н а своей продукци и . В опти м ал ьном варианте
к устройству прилагаются и драйвер , и инструкции по его инсталляции. Однако с наи­
большей вероятностью н ужны й драйвер можно найти на каком-нибудь неофициальном
веб-сайте. Будьте осмотрител ьн ы м и .
Файл ы и номера устройств
Во м ногих случаях драйверы устройств являются частью ядра, а не пользовател ьским
процессом . Однако получ ить доступ к драйверу можно как из ядра, так и из простран ­
ства пользователя . Как правило, для этого используются файлы устройств, зап исан ные
в каталоге / dev. Ядро отображает операции над этим и файлами в вызовы кода драй вера.
Для м ногих несетевых устройств в каталоге / dev имеются один или несколько со­
ответствующих файлов. Слож н ы е серверы могут п оддержи вать сот н и разл и ч н ых
устройств. С каждым файлом устройства в каталоге / dev связа н ы старший и младш и й
номера устройства. П осредством этих номеров ядро преобразует обращения к файлу
устройства в вызовы н ужного драйвера.
Глава 1 1 . Драйверы и ядро
355
Старш и й н о м е р устрой ства обозначает драйвер, з а которым закреплен данн ы й
файл ( иначе говоря , о н определяет т и п устройства). Младший номер устройства обыч­
но указывает на то, к какому конкретно устройству дан ного типа следует обращатьс я .
Младший номер и ногда называют номером модуля.
Узнать номера устройств позволяет команда l s - 1 .
l i nux$ ls - 1 / dev / sda
brw-rw- - - - 1 root d i s k 8 , О Jul 13 0 1 : 3 8 / d e v/ s d a
В этом примере выдана информация о первом диске SCSI/SATA/SAS в с истеме Linux.
Его старш и й номер равен 8, а младши й - О.
Младший номер иногда используется драйвером дл я выбора или активаци и опре­
деленн ых функций (характеристик) устройства. Например, накопителю на магнитной
ленте могут соответствовать два файла в каталоге /dev, оди н из которых при закрытии
будет автоматически обеспечивать обратную перемотку, а второй - нет. Драйвер волен
интерпретировать младший номер устройства по с воему усмотрен и ю . Особенности ра­
боты драй вера можно узнать на соответствующей справочной странице.
Файлы устройств бывают двух типов: блоч н ы е и с и м вольн ые. Ч те н ие и з блочн ого
устройства и зап ис ь в него осуществля ются по одному блоку за раз (блок - это группа
байтов, размер которой обычно кратен 5 1 2) , тогда как чтение из с и мвольного устрой­
ства и запись в него происходят в побайтовом режиме. Символ Ь в в ыводе команды ls
означает, что / dev/ sda я вляется блочн ы м устройством . Есл и бы это устройство было
символьн ы м , то первым символом был бы символ с.
В п рошлом определенные устройства могл и действовать и как блоч н ы е , и как с и м ­
вольные, и существовали отдельные файлы устройств, чтобы сделать их доступн ы м и в лю­
бом режиме. Диски и ленты "жили двойной жизнью", но большинство других устройств
этого не делали . Однако эта система параллельного доступа больше не испол ьзуется. Все
устройства, которые ранее работали в двух режимах, система FreeBSD теперь представляет
в качестве символьных усчюйств, а Linux представляет их как блочные устройства.
Определенные системные функции удобно реализовывать, испол ьзуя драйвер устрой­
ства, даже если связан ное с ним устройство не существует. Такие фантом н ые устройства
называют псевдоустройствами. Например, пользователю, зарегистрировавшемуся в с исте­
ме по сети, назначается псевдотерминал ( РТУ) , которы й с точки зрен и я высокоуровнево­
го программ ного обеспечения ничем не отличается от обычного последовательного порта.
Благодаря такому подходу программы, написанные в эпоху алфавитно-цифровых терми­
налов, могут функционировать в м ире окон и сетей. Вот еще примеры псевдоустройств:
/dev/zero, /dev/null и /dev/urandom.
Когда программа выпол няет операцию над файлом устройства, ядро перехватывает
обращение к файлу, и щет в табли це переходов соответствующую фун кцию и передает
управление соответствующей части драйвера. Для выполнения н еобычных операц и й ,
не и меющих п ря м ы х аналогов в м одели файловой систе м ы (например, вытал кивание
дискеты из дисковода), испол ьзуется систе м н ы й вызов ioctl , которы й передает поль­
зовательс кую команду непосредственно драйверу. Типы запросов стандартной команды
ioctl регистрируются в органе центральной авторизации аналогично номерам сетевых
протоколов, используемых функцией управления пространства м и I Р-адресов IANA.
Систем а FreeB S D продолжает испол ьзовать традиционную с истему i o c t l . Тради ­
ционные устройства в системе Linux также применяют команду ioctl , но в современ­
ном коде сетевых устройств используется более гибкая система сокетов Netlink, описанная
в спецификации RFC3549. Эти сокеты обеспечивают более гибкую систему сообщен и й ,
ч е м команда ioctl , потому что дл я них не требуется орган центральной авторизации .
Часть 1. Основы администрирования
3 56
П роблемы уп равления файлами устройств
Файл ы устройств был и сложной проблемой в теч е н и е м ногих лет. Когда с и сте ­
м ы поддержи вал и тол ько нескол ько типов устройств, руч ное обслуж и ван и е файлов
устройств было управляемым. Однако, когда число доступных устройств выросло , фай ­
ловая система /dev стала запутанной и часто содержала файлы , не имеющие отношения
к текущей системе. В системе Red Hat Ente rprise Linux верси и 3 было вкл ючено более
1 8000 файлов устройств , по одному на все возможные устройства, которые можно было
подкл ючить к системе! Создание статических файлов устройств быстро стало огромной
проблемой и эвол юцион ным туп иком .
U S B , FireWire , Thunderbolt и другие и нтерфейсы устройств вносят допол н ител ьные
сложности . В идеале диск, который первоначально распознается как / dev/ sda, оста­
нется доступн ы м как /dev/ sda, несмотря на периодические отключе н ия и независимо
от активности других устройств и ш и н . Н ал ичие других подкл ючаемых устройств, таких
как камеры, при нтеры и сканеры (не говоря уже о других типах съе м н ы х носителей ) ,
усложняет ситуацию и еще бол ьше ухудшает проблему надежной идентификации.
Сетевые и нтерфейсы имеют такую же проблему; они я вл я ются устройствами , но н е
имеют файлов устройств для их п редставления в каталоге /dev. Для этих устройств со­
временн ым подходом я вляется испол ьзование относ ител ьно простой с исте м ы прогно­
зируе м ых сетевых интерфе йсов ( PredictaЫe Network l nterface Names) , которая назначает
и мена и нтерфейсов, сохраняемых при перезагрузках, модерн изации оборудования и из­
менен и и драйверов. Современные систе м ы теперь имеют аналогичные методы для рабо­
ты с именами других устройств.
Созда н ие фа йлов устройств
Файл ы устройств можно создавать вруч ную. Однако в н астоя щее врем я сложно
встретить л юдей, создающих файлы устройств с помощью команды mknod, которая име­
ет следующий синтаксис.
mknod имя_ файла тип с тарший младший
Здесь имя_ файла - это создаваем ы й файл устройства, тип - тип устройства (с - в слу­
чае символ ьного устройства и Ь
в случае блочного) , а старший и младший - старш и й
и младший номера устройства соответственно. Если вы вручную создаете файл устрой ­
ства , драй вер которого уже имеется в ядре, просмотрите соответствующую этому драй ­
веру mаn-страни цу и найдите указанные в н е й старш и й и младши й н омера.
-
Уп равление современ н ыми файловыми системами
Систем ы Linux и Free B S D автоматизируют управление файлам и устройств. В клас­
сичес ком стиле U N IX систе м ы более ил и менее оди наковы по свое й кон це п ци и , но
полностью разделе н ы по своим реализациям и форматам файлов конфигурации. П усть
расцветает тысяча цветов!
Есл и обнаруже но новое устройство, обе с исте м ы автоматически созда ют соответ­
ствующие файл ы устройства. Если устройство отключается (например, USВ-накоп ител ь
выни мается из порта U S B ) , е го файл ы устройства удал я ются . По архитектур н ы м сооб­
раже ниям с истем ы Linux и Free B S D изол ируют часть "создания файлов устройств" из
этого уравнения.
В системе Fre e B S D устройства создаются ядром в специал ьной файловой систем е
(devf s ) , которая монтируется в каталоге /dev. В системе Linux за это действие отвечает
Глава 1 1 . Драйверы и ядро
3 57
демон udev, работающий в пользовател ьс ком пространстве . Обе с истем ы п рослуш и вают
базовый поток событий , ге нерируемых ядром , которые сообщают о подкл юче н и и и от­
ключении устройств.
Тем не менее с недавно обнаруженным устройством нам часто хочется выпол н ить на­
много бол ьше операций, чем просто создать для него файл устройства. Например, если он
представляет собой часть съемных носителей, мы могли бы автоматически смонтировать его
как файловую систему. Если это кон центратор или коммуникационное устройство, то ско­
рее всего мы должны будем настроить его с помощью соответствующей подсистемы ядра.
Как Linux , так и Fre e B S D оставляют эти расш ире н н ы е процедуры демонам пол ь­
зовател ьского пространства : udevd в случае Linux и devd в случае Free B S D . Основное
концептуал ьное различие между двумя платформами закл ючается в том , что Linux кон ­
центрирует бол ьшую часть логики в де моне udevd, тогда как файловая с исте ма devfs
в систе ме Free BS D сама по себе нем ного настраивается.
В табл . 1 1 . 1 представл е н ы ком поненты систе м управл е н и я файла м и устройств
на обеих платформах.
Табnица 1 1 . 1 . Схема а втоматическоrо управления устройствами
Component
Файловая система / dev
Файлы конфигурации файловой системы / dev
Управляющий демон устройства
Файлы конфигурации демона
Linux
FreeВSD
udev/devtmpfs
devfs
—
/ e tc/devf s . conf
/ e tc/devfs . rules
udevd
devd
/etc/udev/udev . conf
/etc/devfs . rules
/ lib/udev/ rules . d
/e tc/udev/ rules . d
Автоматическое монтирование файловой системы udevd
autofs
Управление устройствами в Li nux
Адм и н истраторы Linux должны помн ить, как работает с истем а правил udevd , и
знать, как испол ьзовать команду udevadm. Однако прежде ч е м вни кать в эти детал и ,
давайте сначал а рассмотрим базовую технологию sys f s , хра н ил и ща и н формации об
устройстве , из которого udevd получает свои необработанные дан ные.
Файловая система sysrs: доступ к "серд цу " устройств
Виртуал ьная файловая с исте ма s y s f s была добавлена в ядро Linux в верс и и 2 . 6
и предоставляет хорошо орган изованную и подробную и нформацию обо всех доступ ных
устройствах, их конфигурациях и состоя н и и . Доступ к драй веру возможен как из ядра,
так и со сторон ы команд пользовател ьского уров ня.
Для выяснения всей информации об устройстве (используемом и м прерывании 1 RQ,
количестве блоков, поставлен н ых в очередь на зап ись контроллером диска, и т. п . ) мож­
но исследовать каталог / sys , в котором обычно монтируется с истем а sys f s . Один из
основополагающих принци пов формирования этой файловой систе м ы состоит в том ,
что каждый файл в каталоге / sy s должен представлять тол ько оди н атрибут связа н ­
ного с н и м устройства. Это соглашение обеспеч и вает определен ное структурирование
в остальном хаотичного набора дан н ых.
В табл . 1 1 . 2 перечислены каталоги , включе н н ые в корневой каталог / sys, каждый из
которых я вляется подсистемой, регистрируемой с помощью sys fs. Состав этих катало­
гов зависит от дистрибутива.
Часть 1. Основы администрирования
358
Таблица 1 1 . 2 . Подкаталоги каталога / sys
Каталог
Описание
Ыосk
Информация о блочных устройствах, например о жестких дисках
bus
Шины, известные ядру: PCl -E, SCS I , USB и др.
class
Дерево, организованное функциональными типами устройств, например звуковые и графи­
ческие карты, устройства ввода и сетевые интерфейсы
dev
Информация об устройствах, разделенная между символьными и блочными устройствами
devices
К орректное представление (с точки зрения наследственности ) всех обнаруженных
устройств•
fi rmvare Интерфейсы с такими зависимыми от платформы подсистемами, как ACPI
fs
kernel
module
pover
Каталог для хранения некоторых (но не всех) файловых систем, известных ядру
З начение таких внутренних характеристик ядра, как кеш и виртуальная память
Динамические модули , загруженные ядром
Некоторые сведения о состоянии производительности системы (обычно не используется )
• например, звуковые и графические карты , устройства ввода и сетевые интерфейсы.
Первоначал ьно и н формация о конфигурации устройств, если таковая существовала,
хран илась в файловой системе /proc, унаследован ной от операционной системы System
V U N IX и развивавшейся нескол ько хаотически. В результате , она стала накапли вать
много л и ш н е й и н формации , не относящейся к конфигурации устройств. Хотя и нфор­
мация о процессах и ядре , связан ная со временем выполнения, по- п режнему хран ится
в каталоге /proc для обеспечен ия обратной совместимости , предполагается, что со вре­
менем вся и н формация об устройствах будет пере мещена в каталог / sys.
Коман да udevadm: исследование устройств
Команда udevadm запрашивает и н формацию об устройствах, и н ициализирует со­
быти я , управляет демоном udevd и отслеживает события менеджера udev и ядра .
Систе м н ые адм и н истраторы испол ьзуют ее, в ос новном , для создания и тестирования
правил , которые описываются в следующем разделе .
Команда udevadm в качестве своего первого аргумента ожидает одну и з шести команд:
info, trigger, settle, contro l , moni tor или test. Особый интерес для системных
администраторов представляют две команды : info, которая выводит информацию, зави­
сящую от кон кретного устройства, и control , которая запускает и останавливает работу
менеджера устройств udev или заставляет его перезагрузить свои файл ы правил . Команда
moni tor отображает события по мере того, как они происходят в системе.
Следующая команда отображает все атрибуты демона udev для устройства sdЬ. Здесь
результат выполнения команды представлен в усеченном виде , но в действительности
он содержит список всех родительских устройств ( например, ш и н ы U S B ) , которые в де­
реве устройств являются предками устройства sdЬ.
l i nu x $ udevadm info
- а -n
sdЬ
l o o k i n g a t devi c e ' / devi c e s / p c i 0 0 0 0 : 0 0 / 0 0 0 0 : 0 0 : 1 1 . 0 / 0 0 0 0 : 0 2 : 0 3 . 0 /
u sЫ / 1 - 1 / 1 - 1 : 1 . 0 / h o s t б / t a r g e t б : 0 : 0 / 6 : 0 : 0 : 0 / Ы o c k / s db ' :
KERNEL = = " s db "
S U B S Y S TEM== " Ы o c k "
DRI VER== " "
ATTR { r ange ) == " l б "
Глава 1 1 . Драйверы и ядро
359
AT T R { e x t_r a n g e \ = = " 2 5 6 "
ATT R { r emovaЬ l e l = = " l "
ATT R { ro \ == " O "
AТ T R { s i z e \ == " 1 9 7 4 2 7 1 "
ATT R { c a p ab i l i t y \ == " 5 3 "
ATT R { s t a t } == " 7 1 9 8 6
1561
860
1
О
1
12
О
592
872"
В с е пути в резул ьтате в ы п ол н е н и я команды udevadm ( н а п р и м е р , / devi ce s /
pci O O O O : 0 0 / ... ) приведе н ы относительно каталога / sys .
Этот резул ьтат отформатирован так, чтобы вы могли при построен ии правил обра­
щаться к менеджеру udеv. Например, если бы запись АТТR { s i zе } == " 1 9 7 4 2 7 1 " была
ун икальной для этого устройства, вы могл и бы с копировать этот фрагмент в п равило
в качестве идентифицирующего критерия .
Узн ать допол н ительн ые возможности и синтаксис команды udevadm вы сможете , об­
ратившись к ее справоч ной стра н и це .
Созда ние пра вил и постоян н ых имен
Менеджер устройств udev опирается н а набор правил , определя ющих возможности
управления устройствами и присваивания им и м е н . Стандартн ы е правила хранятся в ка­
талоге / l ib / udev / rules . d, а локал ьн ые - в каталоге / etc/udev / rules . d. Вам не
нужно редактировать или удалять стандартн ы е правила - их можно и гнорировать ил и
переопредел ить путем создан ия нового файла стандартн ых правил с прежним и м е н е м
в пользовательском каталоге правил .
Главн ы м файлом конфигурации дл я м е н еджера udev я вляется файл / e t c / udev/
udev . conf. Файлы udev . conf в наших при мерах дистрибутивов содержат только ком ­
ментарии , за искл ючением одн о й строки , которая позволяет вы пол нять регистраци ю
ош ибок.
К сожалению, из-за пол итических разногласи й между дистрибьюторами и разработ­
чикам и дистрибутивы плохо согласован ы друг с другом. М ногие имена файлов в катало­
ге стандартн ы х правил не меняются при переходе от дистрибутива к дистрибутиву, в то
вре мя как содержимое этих файлов претерпевает существен н ые изм е н е н ия .
Файл ы правил и м е н уются в соответствии с шаблоном п п - о пи с а ни е . rule s , где
п п - обычно двузначное число. Файлы обрабаты ваются в лексическом порядке , поэто ­
му м е н ьш ие числа обрабаты ваются первы м и . Файлы из двух катало гов правил объед и ­
няются д о того, как демон менеджера udev, udevd, проанализирует их. Суффикс . rules
обязателен - без него файлы игнорируются.
П равила задаются в таком формате.
условие , [ условие , . ] назна чение [ , на зна чение . ]
Здесь элемент условие оп ределяет ситуаци и , в которых должно применяться да н ное
правило. Каждое выражен ие условия состоит из кл юча, знака операции и значе н и я .
Например, в качестве потен циал ьного ком понента правила может испол ьзоваться усло­
вие ATTR { s i ze } == " 1 9 7 4 2 7 1 " (см . пример выше ) , отбирающее все устройства, атри бут
size которых в точности равен значен ию 1 9 7 4 2 7 1 .
Бол ь ш и н ство кл ючей , участвующих в зада н и и услови я , связа н ы с о с войства м и
устройств ( которые де мон udevd получает из файловой систе м ы / sy s ) , н о есть и такие
ключ и , которые отн осятся к другим контекстно-зависим ым атрибутам , таким как обра­
батываемая операция ( например, добавление устройства или е го удале н ие из с исте м ы ) .
Все элементы условие должн ы сопоставляться в порядке активизации правила.
..
. .
Часть 1. Основы администрирования
360
Ключи, воспри н и мае мые менеджером устройств udev, представлены в табл . 1 1 . 3 .
Таблица 1 1 . 3 . Ключ и , воспринимаемые менеджером устройств udev
Ключ условия
Действие
AC T I ON
С опоставляется с типом события , например добавление или удаление
С опоставляется со значениями файловой системы sys f s устройства•
А T T R { имя_ фа йл а 1
С опоставляется с конкретным путем устройства
С опоставляется с драйвером , используемым устройством
DEVPATH
DRIVER
ENV { ключ 1
KERN E L
С опоставляется со значением переменной среды
С опоставляется с именем ядра для устройства
Выполняет внешнюю команду; условие считается выполненным, если код завершен ия команды равен О
PROGRAМ
RESULT
S U B S Y STEM
T E S T { ота s k 1
С опоставляется с результатом последнего вызова посредством ключа PROGRAМ
С опоставляется с конкретной подсистемой
П роверяет факт существования файла; элемент oma s k необязателен
•Имя_файла - это лист на дереве файловой системы s ys f s , соответствующий конкретному атрибуту.
В правилах сопоставления элементы на зна чение задают де йствия , которые долже н
предпринять демон udevd, чтобы обработать событие . Формат этих элементов подобен
формату элементов условие.
Самым важным ключом элемента назна чение я вляется кл юч NАМЕ , который означает,
каким именем менеджер udev должен назвать устройство. Необязател ьный кл юч SYML INK
создает символическую ссьmку на устройство через путь, заданн ы й в каталоге /dev.
Рассмотри м совместную работу этих ком понентов на прим ере фле ш - памяти U S B .
Предположим , что м ы хотим сделать и м я этого устройства постоя н н ы м и обеспечить ав­
томатическое его монтирование и размонтирование.
Встави м нашу фле ш - па мять и посмотр и м , как ядро может идентифицировать ее.
Возможн ы два пут и . В ы пол н и в команду l susb, м ы можем исследовать ш и ну U S B на­
прямую.
ubu n t u $
Bus 0 0 1
Bus 0 0 1
Bus 0 0 2
l susb
D e v i c e 0 0 7 : I D 1 3 0 7 : 0 1 6 3 T r a n s c e n d , I n c . U S B F l a s h D r i ve
Devi c e 0 0 1 : I D l d 6b : 0 0 0 2 L i nux Founda t i on 2 . 0 r o o t hub
D e v i c e 0 0 1 : ID l d 6b : 0 0 0 1 L i nux Founda t i on 1 . 1 root hub
В качестве ал ьтернативного вариа нта можем проверить запи с и в журнале ядра с по­
мощью команд dmesg ил и j ournalctl. В нашем случае устройство оставляет простран ­
ную контрольную запись.
Aug
9 1 9 : 5 0 : 0 3 ubuntu k e r n e l : [ 4 2 6 8 9 . 2 5 3 5 5 4 ) s c s i 8 : 0 : 0 : 0 :
D i r e c t -Acc e s s U t 1 6 3
U S B 2 F l a s h S t o r a g e 0 . 0 0 PQ : О AN S I : 2
Aug 9 1 9 : 5 0 : 0 3 ubun t u k e r ne l : [ 4 2 6 8 9 . 2 9 2 2 2 6 ) s d 8 : 0 : 0 : 0 : [ s db ] 1 9 7 4 2 7 1
5 1 2 -b y t e h a rdw a r e s e c t o r s : ( 1 . 0 1 GB / 9 6 3 M i B )
Aug
Aug
Aug
Aug
9 1 9 : 5 0 : 0 3 ubuntu k e r ne l : [ 4 2 6 8 9 . 3 0 4 7 4 9 ] s d 8 : 0 : 0 : 0 : [ s db ] 1 9 7 4 2 7 1
5 1 2 -b y t e ha rdwa r e s e c t o r s : ( 1 . 0 1 GB / 9 6 3 M i B )
9 1 9 : 5 0 : 0 3 ubuntu ke rne l : [ 4 2 6 8 9 . 3 0 7 1 8 2 )
s db : s dЫ
9 1 9 : 5 0 : 0 3 ubuntu k e r n e l : [ 4 2 6 8 9 . 4 2 7 7 8 5 ) sd 8 : 0 : 0 : 0 : [ s db ] A t t a c h e d
S C S I r ernova Ы e d i s k
9 1 9 : 5 0 : 0 3 ubuntu k e r n e l : [ 4 2 6 8 9 . 4 2 8 4 0 5 )
s d 8 : 0 : 0 : 0 : At t a ched s c s i
g en e r i c s g 3 t ype О
Глава 1 1 . Драйверы и ядро
361
Предстаме н н ы е выше журнальные сообщен и я означают, что устройство б ыло рас­
познано как s dЬ, и это позволяет нам просто идентифицировать устройство в файло­
вой системе / sys. Теперь мы можем просмотреть файловую с истему / sys с помощью
команды udevadm и поискать фрагме нты правил , которы е служат характер истикой
устройства и могут использоваться в правилах менеджера udev.
ubub t u $ udevadm info - а -р /Ыock/ sdЬ/ sdЬl
looking at d e v i c e ' / d e v i c e s /p c i 0 0 0 0 : 0 0 / 0 0 0 0 : 0 0 : 1 1 . 0 / 0 0 0 0 : 0 2 : 0 3 . 0 /
u sЫ / 1 - 1 / 1 - l : l . O / h o s t 3 0 / t a r ge t 3 0 : 0 : 0 / 3 0 : 0 : 0 : 0 /Ы oc k / s dЬ / sdЫ ' :
KERNEL== 11 s dЫ 11
S U B S Y S T EM== 11 Ь l o c k 11
DRI VER== 11 11
ATT R { p a r t i t i on } == 11 l 11
ATT R { s t a r t } == 11 6 3 11
ATT R { s i z e } == 11 1 9 7 4 2 0 8 11
ATT R { s t a t } = = 11 7 1 7 9 2 1 8 5 7 8 0 8 о о о о о 5 1 2 8 0 8 11
looking at p a r e n t devi c e ' / devi ce s / p ci 0 0 0 0 : 0 0 / 0 0 0 0 : 0 0 : 1 1 . 0 / 0 0 0 0 : 0 2 : 0 3 . 0 /
u sЫ / l - l / 1 - l : l . 0 /h o s t 3 0 / t a r g e t 3 0 : 0 : 0 / 3 0 : 0 : 0 : 0 /Ы o c k / s db ' :
KERNEL S = = 11 s db 11
S U B S Y S T EMS = = 11 Ы o c k 11
DRI VERS = = 11 11
ATTRS { s c s i_ l e ve l } == 11 3 11
ATT RS { ve n do r } = = 11 U t l 6 З
ATT RS { rnode l } = = 11 U S B 2 Fl a s h S t o r a g e 11
Результат выполнения команды udevadm отображает возможности совпаде н и й с за­
данн ы ми значениями. Одна из н и х - поле size, которое , вероятно, ямяется уни каль­
ным для дан ного устройства. Но если бы размер раздела изм е н ился, устройство не бьшо
бы распознано. Мы можем также использовать сочетание двух значен и й : соглашение
ядра о назнач е н и и и м е н в в иде s d с дополн ительной буквой и содержимое атрибута
модели U S B 2 F l a s h S t o r a g e . При созда н и и правил для дан ного конкретного устрой­
ства флеш-памяти еще одн и м вари антом мог бы послужить сери й н ы й номер устройства
(здесь он не отображен ) .
Помест и м н а ш и правила для этого устройства в файл / e t c / udev / r u l es . d / 1 0 local . rules. Поскольку м ы собираемся достичь сразу нескольких целей , нужно соз­
дать ряд правил .
П режде всего , м ы должн ы позаботиться о созда н и и с и м вол и ч е с к и х ссылок
на устройство в каталоге / dev. Следующее правило для идентификац и и устройства
испол ьзует наши знания о ключах условий AT T R S и KERNE L , почерпнутых из команды
udevadm.
ATTRS { rnode l } == 11 US B 2 F l a s h S t o r age 11 , KERNEL== 11 s d [ a - z ] l 11 ,
S YML I N K + = 11 a t e - f l a s h % n 11
(Это правило представлено в в иде двух строк, чтобы оно поместилос ь н а стран и це
книги; в оригинальном файле оно зан имает одну строку. )
Когда н а ш е правило срабатывает, демон udevd устанавливает значение / dev/ate­
flashN в качестве с и м волической ссьш к и н а устройство. В действительности мы не
ожидаем в с истеме поя вления более одного такого устройства. Если обнаружится н е ­
сколько копи й устройства, они получат уни кальные и м е н а в каталоге /dev, н о точные
имена зависят от порядка вставки устройств в с истему.
Часть 1 . Основы администрирования
362
Затем мы испол ьзуем кл юч A C T I ON для выпол н е н ия ряда команд вся к и й раз, ког­
да устройство будет появляться на ш ине U S B. Кл юч элемента назна чение RUN позво­
ляет создавать соответствующ и й каталог точ ки монтирования и монтировать там наше
ус тройств о .
ACT I ON== " add " , ATTRS ( mode l } = = " U S B 2 Fl a s h S t o r a g e " , KERNEL== " s d [ a - z ] l " ,
RUN+= " /Ь i n /mkdi r -р /mn t / a t e - f l a s h % n "
ACT I ON== " add " , ATTRS ( mode l } = = " U S B 2 F l a s h S t o r a g e " , KERNEL== " s d [ a - z ] l " ,
P ROGRAМ== " / l i Ь /udev/vo l_i d - t % N " , RE S ULT== " v f a t " , RUN + = " / Ь i n /mount
-t v f a t /de v / % k /mnt / a t e - f l a s h % n "
Кл юч и PROGRAМ и RUN R Ы ГЛЯДЯТ ПОХОЖ И М И , н о напомним, что PROGRAМ - это ключ ус­
лови я , который активен во время фазы выбора правила, тогда как RUN - это ключ назна­
чения , которы й является ч ас т ь ю действий, ини циирован ных правилом . Второе правило
с помощью опции -t vfat в команде mount еще до операции монтирования проверяет,
что фл еш - п а мя т ь содержит файл овую систему Windows.
Аналогичные правила после удаления устройства из системы позволяют выполн ить
оч истительно- восстановител ьные операци и .
ACT I ON== " r emove " , AT TRS ( mode l } = = " U S B 2 F l a s h S t o r a g e " ,
KERNEL== " s d [ a - z ] l " , RUN+= " / Ь i n / umount - 1 /mnt / a t e - f l a s h % n "
ACT I ON== " remove " , AT TRS ( mode l } = = " U S B 2 F l a s hS t o r a ge " ,
KERNEL== " s d [ a - z ) l " , RUN+ = " / b i n / rmdi r /mn t / a t e - f l a s h % n "
Те перь, когда правила подготовле н ы , м ы должн ы уведом ить де мон udevd о на­
ших и з м е н е н иях. Команда c o n t ro l , испол ьзуе мая в качестве аргуме н та команды
udevadm, - одна из нем ногих, которые требуют полномочий суперпол ьзователя .
ubun t u $ sudo udevad111 control
- -
r elo ad rules
-
Опечатки молча и гнори руются после перезагрузки , даже с испол ьзованием флага
- - deЬug, п о это му не забудьте дважды проверить синтаксис своих правил.
Вот и все! Теперь, ко гда флеш-nамять вставляется в разъе м U S В- порта, демон udevd
создает с и мволичес кую ссылку /dev/ate - flashl и монтирует устройство /mnt/ate ­
flash l .
ubun t u $ l s - 1 /dev/ ate •
l rwx rwxrwx 1 r o o t root 4 2 0 0 9 - 0 8 - 0 9 2 1 : 2 2 / d e v / a t e - f l a s h l - > s dЫ
ubun t u $ mount 1 qrep ate
/ dev / s dЫ on /mnt / a t e - f l a s h l t ype v f a t ( rw )
У п ра в ление ус тр о й с тв ами в системе FreeBSD
Как м ы в иде л и в кратком обзоре, приведе н ном выше , реал изация автоном ­
ной файлоной систе м ы /dev в с истеме Fre e B S D называется devfs , а ее де­
мон управления устройствами на пользовател ьском уровне - devd.
Файловая система dev�•: автомати ческая конф игурация ф айла устройства
В отли ч и е от файловой с исте м ы udev от Linux, devfs может н астраи ваться само­
стоятельно. Однако эта система настройки я вляется и с воеобразно й , и огран иченной.
Она делится на загрузоч ную ( /etc/devfs . conf) и динамическую части ( /etc/devfs .
rules). Эти два файла ко н фигура ц ии имеют разн ые синтаксисы и немноrо разные воз­
можности.
глава 1 1 . Драйверы и ядро
363
Файловая с исте ма dev f s для статических ( несъе м н ых) устройств н астраивается
в файле /etc/devf s . conf. Каждая строка - это правило, начинающееся с действия .
Возможн ы м и действия м и я вляются l i n k , own и p e rm. Действие l i n k устанавл ивает
символические ссылки для определенных устройств. Действия o w n и p e rm изменяют
владельцев и разрешения файлов устройств соответствен но.
Каждое действие при н имает два параметра, интерпретация которых зависит от кон ­
кретного действия. Например, п редположим , что м ы хотим , чтобы н а ш привод DVD­
RO
Скачать