Компьютерные науки - Учебники на русском языке - Скачать бесплатно
ментацией диска. Это означает, что файлы файловой системы запи-
сываются на жесткий диск маленькими частями. Когда файл пишется
на более чем одну часть диска, используется небольшой объем
пространства диска. Можно восстановить пространство файловой
системы (обычно от 5 до 10 процентов), если, предварительно сде-
лав полную копию всех файлов файловой системы, удалить все файлы
с жесткого диска и затем восстановить их с резервной копии. Что-
бы сделать полную резервную копию системных файлов, прочитайте
главу "Дублирование файловых систем" настоящего руководства, где
приводятся инструкции по дублированию и восстановлению файловых
систем. (Фрагментация диска - это проблема производительности;
подробнее см. главу "Настройка производительности системы" нас-
тоящего руководства.)
.
- 4-12 -
Так как файлы целиком переписываются на диск, каждый файл
записывается одним куском, и фрагментация уменьшается. Будет
восстановлен небольшой объем пространства. Было бы неплохо вы-
полнять эту процедуру примерно раз в год для интенсивно исполь-
зуемых систем, и немного реже - для умеренно используемых сис-
тем. Перед началом этих работ убедитесь в наличии полной, точной
и читаемой копии, чтобы не потерять файлы.
Расширение файловой системы
Если свободного пространства хронически мало, может ока-
заться полезным расширить объем памяти системы, включив второй
жесткий диск, как описано выше в данной главе. Как только он
смонтирован, можно использовать эту новую файловую систему для
работы, или даже копировать в нее пользовательские или системные
каталоги.
Хроническая нехватка пространства обычно вызывается тем,
что в системе больше пользователей, чем текущий жесткий диск в
состоянии нормально обработать, или что имеется слишком много
каталогов или файлов. В обоих случаях создание новой файловой
системы позволяет перевести некоторых пользователей или ка-
кие-либо каталоги с жесткого диска, освобождая значительное ко-
личество пространства существующей файловой системы и улучшая
функционирование системы.
.
- 4-13 -
ФАЙЛОВЫЕ СИСТЕМЫ И БОЛЬШИЕ КАТАЛОГИ
Рекомендуется избегать использования каталогов, размер ко-
торых больше, чем необходимо. Следует знать несколько специаль-
ных размеров. Каталог, содержащий строки для не более чем 30
файлов (плюс обязательные строки . и ..), вмещается в один блок
на диске, и его просмотр весьма эффективен. Каталог, содержащий
до 286 строк, по-прежнему считается небольшим; каталог большего
размера, используемый как рабочий, - это обычно катастрофа. Осо-
бенно важно, чтобы были небольшими каталоги регистрации, жела-
тельно не больше блока. Заметим, что, как правило, каталоги не
сжимаемы. Очень важно это уяснить, так как если ваш каталог пре-
вышает пороговое значение 30 или 286, поиск становится неэффек-
тивным; более того, если удалить файлы таким образом, что их
число окажется меньше соответствующего порогового значения, сис-
тема по-прежнему будет неэффективно работать с каталогом.
.
- 4-14 -
ИЗМЕНЕНИЕ/ДОБАВЛЕНИЕ ФАЙЛОВЫХ СИСТЕМ НА ПЕРВИЧНОМ ЖЕСТКОМ
ДИСКЕ
Всегда полезно заранее спланировать компоновку жесткого
диска, как описано в документе Installation Guide. Если вы реши-
ли изменить число файловых систем на жестком диске, вам следует
сделать резервную копию вашей системы и выполнить повторную ус-
тановку, как описано в главе "Повторная установка и модификация
системы" документа Installation Guide. В процессе установки вос-
пользуйтесь ручным управлением компоновки и перераспределите
пространство на диске, как требуется. Важно понять, что нельзя
использовать резервные копии, созданные утилитой xbackup(ADM).
Копиями, создаваемыми этой утилитой, нельзя пользоваться для
восстановления файловых систем, которые имели больший размер,
чем файловые системы, в которые вы планируете их восстановить.
Это остается в силе, даже если резервная файловая система была
не полна. Например, если вы сделали копию 20-мегабайтной файло-
вой системы, заполненной лишь на 50 процентов, вы не сможете
восстановить тома с резервной копией в 15-мегабайтную файловую
систему. В главе, посвященной повторной установке, поясняется,
что для дублирования системы следует воспользоваться утилитами,
основанными на cpio(C) (такими, как выбор Backups->Create в
sysadmsh).
.
- 4-15 -
ЦЕЛОСТНОСТЬ ФАЙЛОВОЙ СИСТЕМЫ
Уже упоминалось, что файловая система - это раздел операци-
онной системы. В обязанности операционной системы входит обеспе-
чение целостности данных файловой системы. Действительная потеря
данных - большая редкость; файловые системы UNIX очень устойчивы
к порче данных. Это вызвано наличием некоторой избыточности в
специальных структурах, невидимых пользователю. Именно эти
структуры обеспечивают целостность файловой системы. Например,
если при работе системы выходит из строя питание, теряется очень
мало информации. Любое нарушение обычно затрагивает один или два
файла, делая их недоступными. Почти во всех случаях операционная
система может исправить любое повреждение файлов. Очень редко
повреждение делает недоступной всю файловую систему.
Для исправления поврежденных файловых систем операционная
система пользуется программой fsck ("filesystem check" - "про-
верка файловой системы"). Эта программа проверяет совместимость
файловой системы. В случаях потери содержимого файла (что бывает
редко) единственный способ восстановить потерянные данные - вос-
пользоваться резервной копией файловой системы. Программа fsck
выполняется автоматически для корневой файловой системы при на-
чальной загрузке. Сообщения состояния программы fsck имеют сле-
дующий вид:
+--------------------------------------------------------------
| ** Phase 1 - Check Blocks and Sizes
| (Фаза 1 - Проверка блоков и размеров)
| ** Phase 2 - Pathnames (Имена путей)
| ** Phase 3 - Connectivity (Связность)
| ** Phase 4 - Reference Counts (Счетчики обращений)
| ** Phase 5 - Check Free List (Проверка свободного списка)
|
Если система прекращена аварийно (выход из строя питания),
появятся другие сообщения, на первый взгляд тревожные:
FREE INODE COUNT WRONG IN SUPERBLK (FIX?)
(Ошибка в счетчике свободных индексных дескрипто-
ров файлов в суперблоке - исправить?)
На самом деле сообщения такого рода являются обычными в случае,
если система не была остановлена нормально; здесь следует лишь
ввести y, и fsck продолжит работу. Это можно сделать без вмеша-
тельства администратора системы, но, как правило, лучше все же
знать, что происходит с файловой системой при возникновении
проблемы.
В целях рассмотрения понятия целостности системы и принци-
пов функционирования fsck следует описать структуру, лежащую в
основе простого понятия файлов, каталогов и файловых систем. Хо-
тя вникать в принципы файловой памяти не обязательно, полезно
знать, к чему относятся сообщения, подобные приведенному выше;
после этого они не будут выглядеть столь загадочно. После изуче-
.
- 4-16 -
ния данного раздела вам станут понятны некоторые основные прин-
ципы операционных систем UNIX. В разделе "Восстановление файло-
вой системы с помощью fsck" описана простая механика использова-
ния команды fsck. Последующие подразделы описывают структуры
файловой системы, с которыми работает fsck.
Файлы в системах UNIX
Каждая файловая система содержит специальные структуры,
позволяющие операционной системе осуществлять доступ и сопровож-
дать файлы и данные, хранящиеся в файловой системе. Нас интере-
сует разрушение и восстановление именно этих структур.
Структура файловой системы базируется на принципе хранения
данных на жестких дисках. Хотя жесткий диск и содержит все дан-
ные, используемые системой, они отнюдь не хранятся там маленьки-
ми аккуратными островками, соответствующими отдельным файлам. Вы
вряд ли сможете, указав какое-либо место на жестком диске, с
уверенностью сказать: "Мой файл записан именно в этой части дис-
ка". На самом деле данные, скорее всего, будут разбросаны по
диску, и операционная система использует сложную схему адреса-
ции, чтобы иметь доступ к каждому из фрагментов, на которые раз-
бивается файл, и представить их всех пользователю как единое це-
лое.
Разброс данных связан с тем, что операционная система на
самом деле работает не с файлами, а с элементами данных. Чтобы
понять, что это означает, предположим, что файл создан и записан
в одну область на диске. Теперь допустим, что вы редактируете
этот файл и удаляете из него несколько предложений вразброс.
Значит, вы теперь используете немного меньше пространства на
диске, чем вначале. Это пространство имеет ряд разрывов в облас-
ти, которую занимал файл. Пространство на диске ценится дорого и
не тратится зря. Эти освободившиеся маленькие участки памяти вы-
деляются другим файлам. Представьте себе этот процесс с участием
сотен файлов и дюжины пользователей, и вам станет яснее принцип
сопровождения файлов. Благодаря эффективности алгоритмов (фор-
мул), используемых операционной системой, этот процесс является
очень эффективным и надежным.
Файловые системы в системах UNIX
Файловая система содержит файлы и каталоги, которые предс-
тавлены специальными структурами, называемыми индексными дескрип-
торами файлов (inodes) и блоками данных; операционная система мо-
жет создавать и отслеживать эти структуры.
Блок данных - это элемент данных размером 1024 байта, запи-
санный на диске. Блок данных может содержать
элементы каталога или данные файла. Элемент
каталога состоит из номера индексного дескрип-
тора файла и имени файла.
.
- 4-17 -
Индексный дескриптор файла - это нечто вроде карточки из
библиотечного каталога. Каждый индексный деск-
риптор файла содержит информацию о файле, ана-
логично карточке, содержащей информацию о кни-
ге, - включая сведения о местоположении, раз-
мере и типе файла, а также о количестве свя-
занных с ним элементов каталога. Необходимо
помнить, что он не содержит имени файла; имена
содержатся в каталоге. В индексном дескрипторе
файла содержится информация о размещении всех
данных, составляющих файл, так что операцион-
ная система в случае необходимости может соб-
рать все эти данные.
Блоки не записываются сразу на жесткий диск. Чтобы свести к
минимуму время поиска данных на жестком диске, недавно использо-
вавшиеся блоки данных хранятся в кэше в специальных структурах
памяти - буферах. Именно использование этих структур повышает
эффективность операционной системы. Когда скопится достаточное
количество данных для записи в один или несколько полных блоков
на диске, буфер "сбрасывается" - содержавшаяся в нем информация
записывается на диск. При сбое какая-то информация всегда теря-
ется, так как недавно изменившиеся данные еще не записаны на
диск, но это несущественно.
Когда жесткий диск заполнен данными, индексными дескриптора-
ми файлов, каталогами, файлами и блоками из кэша памяти, как же
операционная система будет их отслеживать? Это возможно благодаря
тому, что все эти структуры обеспечивают достаточную систему свя-
зей между файлами и каталогами, позволяя восстанавливать разру-
шенные соединения.
Специальный блок данных - "суперблок" - содержит глобальную
информацию о файловой системе, а не просто о том, где расположен
конкретный фрагмент файла. Суперблок содержит информацию, необ-
ходимую для монтирования файловой системы и доступа к ее данным.
Он содержит размер файловой системы, количество свободных описа-
телей файлов и информацию о доступном свободном пространстве.
Информация из версии суперблока на диске считывается, когда
файловая система смонтирована; эта информация поддерживается и
модифицируется в памяти по мере развития активности в системе.
Информация записывается обратно на диск с регулярными интервала-
ми по команде update, которая обычно выполняется сценариями
/etc/rc2, когда система запущена. Команда update вызывает коман-
ду sync(C) каждые 30 секунд, в результате чего происходит запись
на диск версии суперблока в памяти и буферов. При аварии систе-
мы, если записанная на диск информация недостаточно актуальна,
файловая система может быть запорчена.
Причины порчи файловой системы
Любая из структур, упомянутых в данном разделе, может ока-
заться запорченной. Это означает разрушение данных или структур,
используемых для поиска данных. Это может случиться по несколь-
ким причинам:
.
- 4-18 -
Аппаратный сбой Аппаратные сбои происходят редко. Лучший
способ решения такой проблемы - обеспечить
неукоснительное следование рекомендованным
процедурам диагностики и обслуживания.
Программные прерывания
Ошибки, вызывающие сбой программы, могут
быть результатом потери некоторых данных.
Здесь трудно дать общие рекомендации, так
как очень велик диапазон возможных причин.
Ошибка по вине человека
Это основная причина очень многих случаев
порчи файловой системы, как ни горько это
признать. Существуют правила работы с фай-
ловыми системами, которые следует соблю-
дать.
Правила проверки файловых систем
1. ВСЕГДА проверяйте файловую систему командой fsck, прежде
чем ее монтировать. Ничто так не усложняет проблему очистки за-
порченной файловой системы, как использование ее в поврежденном
состоянии.
2. НИКОГДА не удаляйте файловую систему физически без пред-
варительного демонтирования.
3. ВСЕГДА применяйте команду sync перед остановом системы и
перед демонтированием файловой системы. (Команда sync записывает
данные из буферного кэша обратно на диск.)
Регулярное дублирование файловой системы дает наилучшие га-
рантии постоянной целостности файловой системы.
Восстановление файловой системы командой fsck
Файловую систему можно исправить командой fsck. Перед вы-
полнением fsck файловую систему нужно демонтировать. (Корневую
файловую систему демонтировать нельзя, так что в этом случае
следует сначала остановить систему, а затем вновь ее запустить в
однопользовательском режиме (режиме технического обслуживания).)
Команда fsck проверяет различные структуры на диске и пытается
согласовать их. Она по возможности восстанавливает соединения,
разрешает ссылки - "чистит" файловую систему.
.
- 4-19 -
Формат команды:
Ъ2fsck specialfile
@ Пользователи sysadmsh выбирают: Filesystems->Checks
В качестве specialfile нужно задать имя специального файла,
соответствующего имени устройства файловой системы.
Замечание
Программа fsck на самом деле является фронтальной - она вы-
полняет лишь предварительную обработку, запуская для каждого ти-
па файловой системы свою версию fsck. Для исправления файловых
систем DOS программа fsck вызывает специальную версию.
Предположим, например, что вы запустили систему после сбоя
питания и находитесь в однопользовательском режиме. Чтобы прове-
рить файловую систему /u, представленную устройством /dev/u,
введите
fsck /dev/u
и нажмите . Программа проверит файловую систему и выдаст
следующие сообщения о ходе своей работы:
+--------------------------------------------------------------
| ** Phase 1 - Check Blocks and Sizes
| ** Phase 2 - Pathnames
| ** Phase 3 - Connectivity
| ** Phase 4 - Reference Counts
| ** Phase 5 - Check Free List
|
Если на одном из этих этапов обнаружится поврежденный файл,
команда спросит, следует ли его исправить или восстановить. Что-
бы исправить запорченный файл, введите y. Всегда разрешайте сис-
теме восстанавливать запорченные файлы, даже если у вас есть в
запасе их копии или вы намерены их удалить.
Заметим, что команда fsck удалит любой файл, который она
сочтет слишком сильно запорченным и не подлежащим восстановле-
нию. Можно задать возможность выбора для fsck - выполнять вос-
становление или нет. Вы можете заставить fsck проигнорировать
нарушение целостности, если вы сочтете проблему настолько серь-
езной, что либо пожелаете разобраться с ней самостоятельно с по-
мощью утилиты fsdb(ADM), либо решите восстановить систему с ре-
зервных копий. Если вы не можете использовать fsdb, вам следует
дать fsck возможность исправлять нарушения целостности, в про-
тивном случае файловая система может оказаться непригодной к ис-
пользованию.
Заметьте, что вам может понадобиться несколько раз выпол-
нить команду fsck, прежде чем вся файловая система будет очище-
на. Полный список сообщений об ошибках можно найти в странице
Руководства, соответствующей fsck(ADM).
.
- 4-20 -
Краткое описание этапов fsck
Команда fsck просматривает и проверяет каждую из вышеупомя-
нутых структур. На каждом этапе выполняется сравнение компонен-
тов и проверка согласованности этих компонентов друг с другом.
На этапе 1 проверяются блоки и размеры. Команда fsck читает
список индексных дескрипторов файлов, чтобы определить размеры и
отыскать блоки, используемые каждым из файлов. Эти дескрипторы
файлов проверяются на действительность (проверка типа и размера
дескриптора, проверка на равенство нулю счетчика связей) и на на-
личие дефектных или дублированных блоков. (Дефектными являются
блоки, значения которых выходят за границы файловой системы.)
Когда fsck спрашивает, следует ли чистить дескриптор файла, это
означает обнуление в нем дефектной информации. В итоге файл или
каталог, соответствующий этому дескриптору, будет удален. Дубли-
рованный блок означает, что два дескриптора указывают один и тот
же блок на диске. Команда fsck пытается определить оригинальный
дескриптор, чтобы скорректировать дубликат на этапе 2.
На этапе 2 проверяются имена путей. Должны быть удалены эле-
менты каталога для файлов, удаленных на этапе 1. На этапе 2 исп-
равляются ошибки, вызванные неправильным состоянием индексных
дескрипторов файлов, выходом указателей этих дескрипторов за пре-
делы диапазона; исправляются каталоги, указывающие на дефектные
дескрипторы файлов, как описано выше. В случае файлов с дублиро-
ванными блоками, обнаруженными на этапе 1, fsck попытается уда-
лить оба файла (это одна из немногих ситуаций, требующих вмеша-
тельства администратора системы).
На этапе 3 проверяются связи. На этапе 2 удалены каталоги,
не указывающие на действительные файлы. На этапе 3 восстанавли-
ваются связи с файлами, которые выпали из структуры каталога.
Все действительные файлы, на которые нет ссылки, помещаются в
специальный каталог под названием lost+found. Поскольку каталог
был отсоединен, имя файла теряется; в каталоге lost+found файлу
присваивается номер.
На этапе 4 проверяются счетчики обращений. Команда fsck про-
веряет счетчик связей для каждого элемента, благополучно прошед-
шего этапы 2 и 3. В некоторых случаях файлы, на которые не было
указателя в структуре каталога, но которые все же обладают ин-
дексными дескрипторами, могут быть вновь связаны с файловой
системой по каталогу lost+found.
На этапе 5 проверяется свободный список. Команда fsck изу-
чает список свободных блоков, составляемый файловой системой, и
разрешает отсутствующие или неназначенные блоки, которые были
ранее назначены или удалены. При обнаружении нарушения целост-
ности fsck выдает приглашение перестроить список.
На этапе 6 восстанавливается свободный список. Система ре-
конструирует список свободных блоков в соответствии с измененной
файловой системой, если это было определено на этапе 5.
.
- 4-21 -
Автоматическая проверка файловой системы
Иногда операционная система во время старта выдает запрос
на проверку файловой системы. Обычно это имеет место после не-
нормального останова (например, в результате потери мощности в
питании). После проверки файловой системы все файлы, разрушенные
в процессе останова, восстанавливаются.
Исправление файловой системы с помощью команды fsdb
Если после фатального сбоя суперблок файловой системы ока-
зывается настолько поврежден, что fsck не в состоянии его вос-
становить, можно с помощью команды fsdb ("filesystem debugger" -
"отладчик файловой системы") вручную исправить суперблок, наста-
вив "заплат". С большой вероятностью команда fsdb понадобится,
если fsck аварийно прекращается или выдает слишком много ошибок.
Так как fsdb - очень мощное средство, позволяющее не-
посредственно изменять суперблок (который содержит важную инфор-
мацию о файловой системе), использовать его следует с величайшей
осторожностью. Почти во всех случаях, когда требуется применить
fsdb, приходится менять только одну или две ячейки суперблока,
представляющие fsize и isize; им возвращаются значения, обычные
для вашей файловой системы. fsize - общее число блоков в файловой
системе; isize - количество индексных дескрипторов файлов, назна-
ченных файловой системе.
Далее приводятся порядок использования fsdb в целях измене-
ния значений fsize и isize.
1. Получите нормальные значения fsize и isize в вашей файло-
вой системе. Вы должны были записать их согласно инструкции в
конце процедуры установки, описанной в документе Installation
Guide. Если вы этого не сделали, можно получить размер файловой
системы с помощью divvy и оценить число индексных дескрипторов
файлов. Для определения размера файловой системы воспользуйтесь
командой
divvy -b 1 -c 1
Размеры файловых систем выводятся на экран в виде диапазона но-
меров блоков. Нужно вычесть номер начального блока из номера
последнего, и получится размер файловой системы. Приблизительное
число индексных дескрипторов файлов равно размеру, умноженному на
.125.
2. Убедитесь в том, что fsize и isize вашей файловой систе-
мы запорчены.
3. Найдите fsize и isize в суперблоке.
4. Установите fsize и isize равными их нормальным значениям.
.
- 4-22 -
Все эти шаги подробно описаны в последующих разделах. В
странице Руководства, соответствующей fsdb(ADM), приведено нес-
колько других способов применения fsdb для просмотра и обработки
суперблока; однако эти возможности рекомендуется использовать
только опытным администраторам системы.
Проверка нарушения значений fsize и isize
При проверке файловой системы после фатального сбоя команда
fsck считывает из суперблока размер файловой системы. Если зна-
чения fsize и isize, хранящиеся в этот момент в суперблоке, не
являются нормальными значениями для файловой системы, fsck выда-
ет на экран результаты проверки размера и заканчивает работу,
как показано в следующем примере:
+--------------------------------------------------------------
| # fsck /dev/root
| /dev/root
| /dev/root File System: / Volume: root
| Size check: fsize 0 isize 0
| #
|
Сравните значения fsize и isize, выданные командой fsck (в
нашем примере - 0), с нормальными значениями вашей файловой сис-
темы. Если они отличаются, придется выполнить fsdb, чтобы заме-
нить значения в суперблоке на нормальные значения файловой сис-
темы.
Иногда неправильной оказывается только одна из этих вели-
чин, хотя информация, выданная fsck, показывает нарушение обоих
значений. При выполнении fsdb вы увидите фактические значения
fsize и isize, записанные в суперблоке, и поймете, сколько зна-
чений вам придется менять - одно или оба. Для выполнения fsdb
введите следующую команду, задав в качестве filesystem имя фай-
ловой системы:
Ъ2fsdb /dev/filesystem
Полученный в результате вывод будет аналогичен приведенно-
му в следующем примере:
+--------------------------------------------------------------
| # fsdb /dev/root
| /dev/root(/): 1K byte Block File System
| FSIZE = 1895959976, ISIZE = 7216
|
В данном примере fsdb показывает, что некорректно только
значение fsize (хотя fsck выдала некорректность обоих). fsdb
всегда работает аккуратнее.
.
- 4-23 -
Поиск fsize и isize в суперблоке
Чтобы заново установить значения fsize и/или isize, нужно
уметь отыскивать эти значения в суперблоке. Это можно сделать,
перейдя к первому адресу суперблока и проверив первые два значе-
ния, которые и есть суть fsize и isize. В файловых системах UNIX
суперблок начинается по адресу 512, а в файловых системах XENIX
- по адресу 1024. Вот пример для файловой системы UNIX:
+--------------------------------------------------------------
| # fsdb /dev/root
| /dev/root(/): 1K byte Block File System
| FSIZE = 28890, ISIZE = 7216
| 512
| 001000: 000705 (453)
|
| 001002: 000000 (0)
|
| 001004: 070332 (28890)
|
(Клавиша используется для перехода от одного значения в
суперблоке к другому.) Выводятся следующие величины: адрес (в
восьмеричном виде), записанное по этому адресу значение (также в
восьмеричном виде) и его десятичный эквивалент (в скобках). Убе-
диться в том, что вы находитесь в нужном месте суперблока, можно
следующим образом: третья выведенная на экран величина (после
второго нажатия клавиши ) - fsize - должна совпадать со
значением, выведенным командой fsdb при ее запуске (FSIZE). За-
метим, что fsdb выдает значения в блоках по 1К. Если вы возьмете
размер файловой системы у команды df, то он окажется ровно вдвое
больше размера, сообщаемого командой fsdb. Это связано с тем,
что df выдает ответы в 512-байтных блоках. Если вам нужно изме-
нить значение FSIZE, имея размер, выданный командой df, его сле-
дует разделить на два. Если же вы использовали номер из команды
divvy, его преобразовывать не надо, так как divvy, как и fsdb,
пользуется блоками 1К.
Со значением ISIZE дело обстоит иначе. Это значение, выдан-
ное командой fsdb, нужно преобразовать, прежде чем сравнивать со
значением первой величины в суперблоке (isize).
Значение isize, записанное в суперблоке, является адресом
первого блока, расположенного после блоков, которые выделены для
индексных дескрипторов файлов. Чтобы сделать значение isize более
выразительным, fsdb преобразует этот адрес в число назначенных
индексный дескрипторов файлов (ISIZE). Это число нужно преобразо-
вать обратно в адрес блока путем деления ISIZE на 16 (число деск-
рипторов в блоке) и сложения с 2 (для учета первых блоков файло-
вой системы, которые используются для других целей: блок началь-
ной загрузки и суперблок). Результат (isize) должен равняться
числу, выведенному на экран в качестве первого адреса в супербло-
ке.
.
- 4-24 -
Установка нормальных значений для fsize и isize
Теперь, когда вы знаете точное местоположение fsize и isize
в суперблоке, вы можете использовать fsdb, чтобы перейти непос-
редственно к соответствующему адресу, пройти суперблок по словам
и присвоить адресу новое значение.
Замечание
Прежде чем пользоваться командой fsdb, убедитесь в том, что
файловая система демонтирована.
Чтобы перейти к первому адресу суперблока, введите команду
абсолютного адреса, который фиксирован для файловой системы (512
для файловых систем UNIX и 1024 для файловых систем XENIX). В
следующем примере проверяется файловая система UNIX:
+--------------------------------------------------------------
| 512
| 001000: 000173 (123)
|
По умолчанию fsdb считывает адреса, вводимые вами в виде деся-
тичных слов (512), а выводит адреса восьмеричными байтами
(001000). Значение, хранящееся по заданному адресу, также выво-
дится в восьмеричном виде (в скобках дается десятичный эквива-
лент).
Введя адрес в виде слова, можете нажимать , чтобы
продвигаться в суперблоке каждый раз на одно слово.
+--------------------------------------------------------------
| 002000: 000173 (123)
|
| 002002: 000000 (0)
|
| 002004: 007461 (3889)
|
В файловых системах UNIX для достижения значения fsize нужно
дважды нажать , а в файловых системах XENIX - только
один раз. (Это связано со способом хранения значений в супербло-
ке для файловых систем UNIX.)
.
- 4-25 -
Замечание
Если при вводе начального адреса на экране появится следую-
щее сообщение об ошибке:
block out of range (блок вне диапазона)
то это значит, что запорченное значение fsize настолько мало,
что программа fsdb решила, что вы не сможете продвинуться в су-
перблоке так далеко. Чтобы отключить регистрацию ошибок, введите
заглавную букву O. Теперь можно беспрепятственно вводить адрес.
В любой момент можно нажать клавишу INTERRUPT (DEL) или
d, чтобы прекратить вывод адресов на экран.
Предположим, что при переходе ко второму значению в суперб-
локе на экран выдано значение fsize, равное 0 (вместо нормально-
го значения 3889):
+--------------------------------------------------------------
| 002000: 000173 (123)
|
| 002002: 000000 (0)
|
| 002004: 000000 (0)
|
Вы можете присвоить новое значение адресу, который вы види-
те в данный момент, с помощью команды присваивания fsdb. (Перед
тем, как вносить какие-либо изменения, убедитесь, что вы знаете,
что вы собираетесь сделать. fsdb сразу пишет прямо на диск, не
ожидая sync.) Введите знак равенства, и за ним - новое значение:
+--------------------------------------------------------------
| 002002: 000000 (0)
|
| 002004: 000000 (0)
| =3889
| 002004: 007461 (3889)
| q
|
Когда fsdb выдаст подтверждение на запрошенное вами измене-
ние, выйдите из fsdb. Теперь снова можно попробовать выполнить
fsck.
- 4-26 -
Замечание
Перед изменением isize не забудьте выполнить вычисления
(деление на 16 и прибавление 2) для величины ISIZE, выданной ко-
мандой fsdb во время нормальной работы системы. В случае fsize
используйте значение FSIZE, выданное fsdb при нормальной работе
системы, без каких-либо вычислений.
Глава 5
ОБЕСПЕЧЕНИЕ БЕЗОПАСНОСТИ СИСТЕМЫ
Введение 5-1
Что такое надежная система? 5-3
Концепции надежной системы 5-3
Работа надежной системы 5-7
Назначение административных ролей с помощью
авторизаций 5-7
Административное управление подсистемами
с помощью sysadmsh 5-9
Назначение авторизаций ядра 5-9
Использование параметров секретности,
настроенных или принятых по умолчанию 5-11
Управление системным доступом 5-11
Использование подсистемы контроля 5-14
Компоненты подсистемы контроля 5-15
Механизм контроля ядра 5-15
Драйвер устройства контроля 5-15
Демон контроля 5-16
Доступ к контролю через sysadmsh 5-17
Методология контроля 5-18
Авторизации контроля 5-18
Источники контрольных записей 5-18
Учитываемость в контроле 5-20
Типы событий контроля 5-21
Эффективный системный контроль 5-23
Административные аспекты 5-23
Процедуры контроля 5-26
Установка схемы сбора данных 5-27
Включение/выключение контроля 5-32
Сопровождение файлов контроля 5-32
Вывод списка контрольных записей 5-33
Дублирование контрольных записей 5-33
Составление контрольных отчетов 5-34
Понятие редукции данных 5-36
Форматы записей для системных вызовов 5-36
Контрольные записи прикладных программ 5-41
Проблемные области подсистемы контроля 5-44
Пространство на диске 5-44
Фатальные сбои системы 5-45
.
Сообщения подсистемы 5-45
Терминология контроля 5-45
Средства защиты файловой системы 5-48
Очистка битов SUID/SGID и sticky-бита при записи 5-48
Sticky-бит и каталоги 5-49
Промены 5-51
Импортирование данных 5-51
Файлы 5-51
Файловые системы 5-52
Шифрование данных 5-53
Установка бита GID каталога 5-53
Проверка целостности системы 5-54
/etc/fsck 5-54
Контрольный журнал 5-54
Порядок проверок после фатального сбоя системы 5-55
Защищенные базы данных 5-55
Проверка базы данных аутентификации 5-57
Проверка целостности системы 5-57
Сообщения об ошибках, связанных с секретностью 5-59
Сообщения об ошибках регистрации в системе 5-59
Условия ошибок контроля 5-60
Проблемы авторизации 5-61
Функционирование демонов в надежной системе 5-62
Включение защиты с помощью кодового пароля 5-64
Разрешение пользователям монтировать файловые системы 5-65
Авторизация использования команд планирования заданий 5-66
Изменение авторизации на планирования заданий,
принятой по умолчанию 5-66
Разрешение/запрещение использования cron
отдельными пользователями 5-67
Просмотр пользовательских разрешений на cron 5-68
Разрешение/запрещение использования at/batch
отдельными пользователями 5-68
Просмотр пользовательских разрешений на at/batch 5-68
Использование файлов среды для команд at/batch 5-69
.
- 5-1 -
ВВЕДЕНИЕ
Каждая компьютерная система нуждается в защите от несанкци-
онированного доступа к компьютеру, дискам и системным файлам.
Средства обеспечения безопасности, имеющиеся в вашей системе,
представляют собой расширение базовых средств обеспечения безо-
пасности операционных систем UNIX. Операционная система спроек-
тирована таким образом, чтобы удовлетворять требованиям класса
надежности C2, согласно "Критерию оценки надежности компьютерных
систем" Министерства обороны (так называемая "Оранжевая книга").
В данной главе показано, как пользоваться средствами обес-
печения безопасности для поддержания надежности системы. Средс-
тва, касающиеся обычного пользователя, описаны в главе "Исполь-
зование надежной системы" в "Руководстве пользователя" (User's
Guide).
Данная глава содержит следующую информацию:
* общий обзор безопасности системы
* описание защищенных подсистем
* как назначать административные роли
* административное управление подсистемами с помощью sysadmsh
* использование подсистемы контроля
* защита файловых систем
* проверка целостности системы
* сообщения об ошибках
* работа демонов в защищенной системе
* включение защиты с помощью кодового пароля
* как пользователи могут монтировать файловые системы
* как пользователи могут планировать задания
- 5-2 -
Замечание
О физической секретности
Средства обеспечения безопасности в операционной системе
будут бесполезны, если аппаратная часть и носители не защищены.
Вы должны защитить от несанкционированного доступа сам компь-
ютер, дистрибутивные дискеты и все носители с резервными копия-
ми. Для этого нужно соблюсти следующие правила:
1. В отсутствие оператора держите систему "под замком".
2. Соберите и заприте все носители с резервными копиями.
.
- 5-3 -
ЧТО ТАКОЕ НАДЕЖНАЯ СИСТЕМА?
Поскольку не существует компьютерной системы, в которой
риск сведен к нулю, для систем употребляется термин "надежная"
(trusted) вместо "безопасная" (secure). Здесь имеется в виду то,
что понимается под классом надежности С2. "Надежная" система -
это система, в которой достигается некоторый уровень контроля
над доступом к информации, обеспечивающий механизмы предотвраще-
ния (или по крайней мере фиксирования) несанкционированного дос-
тупа.
Средства секретности операционной системы являются расшире-
нием средств, имеющихся в типичных, менее "надежных" системах
UNIX. Наряду с расширением возможностей защиты пользовательской
и системной информации, обеспечивается полная совместимость с
существующими механизмами UNIX. Большая часть работы администра-
тора системы включает сопровождение и защиту системной информа-
ции, как описано в настоящем разделе.
При установке системы, если включен контроль, система кон-
фигурируется для работы в "надежном" состоянии. В этом состоянии
только назначенный администратор может обращаться к системной
информации и изменять ее. Как только система переходит в нор-
мальный режим работы, надежное состояние системы следует поддер-
живать, если вы намерены полностью использовать средства надеж-
ности. Если вы будете следовать приведенным рекомендациям, сис-
темная информация останется защищенной.
Имеется также возможность приспособить эти требования к
нуждам вашей вычислительной установки. Можно даже установить
конфигурацию вашей системы таким образом, чтобы она работала в
ненадежном режиме, совместимом с другими системами UNIX. Это
описано в разделе "Конфигурация для ведения учета, устанавливае-
мая по умолчанию". Заметим, что если вы решили смягчить требова-
ния, определяющие надежное состояние своей системы, ее нельзя с
достоверностью восстановить на уровень С2.
Ваши действия как администратора являются решающими для
сопровождения надежной системы. Любые упущения в секретном сос-
тоянии чреваты проникновением в систему. Чтобы эффективно вести
административную работу, вы должны понимать, в чем состоит сис-
темная стратегия секретности, как она контролируется системной
информацией (базами данных) и как вносимые вами изменения влияют
на действия пользователя и администратора.
Концепции надежной системы
Ниже приводятся основные понятия, связанные с надежной сис-
темой. Будучи администратором, вы для успешной работы системы
должны усвоить эти понятия и знать, где хранится информация,
связанная с секретностью. Настоящий раздел является вводным в
эту тему; в последующих разделах данной главы приводятся подроб-
ности, а также процедуры сопровождения.
.
- 5-4 -
Возможность учета
Говорят, что некоторое действие поддается учету, если его
можно отследить вплоть до источника - реального пользователя. В
безопасной системе все пользователи несут ответственность за
свои действия, и каждое действие можно отследить до пользовате-
ля, ответственного за него. В большинстве систем UNIX отсутству-
ет хорошая учитываемость: некоторые действия нельзя отследить ни
до какого пользователя. Например, псевдо-пользовательские бюдже-
ты, такие как lp или cron, выполняются анонимно; их действия
можно обнаружить только по изменениям в системной информации.
Как будет описано ниже, надежная система UNIX повышает учитывае-
мость за счет сопоставления каждому бюджету реального пользова-
теля, контроля над каждым действием и сопоставления каждого
действия конкретному пользователю в системе.
В типичной системе UNIX у каждого процесса есть реальный и
эффективный идентификаторы пользователя, равно как и реальный и
эффективный идентификаторы группы. Процесс с эффективным иденти-
фикатором пользователя root может устанавливать эти идентифика-
торы для любых пользователей. Концепция идентификации пользова-
теля расширена включением дополнительного идентификатора, назы-
ваемого регистрационным идентификатором пользователя (LUID). Это
нечто вроде нестираемой метки, проставляемой на каждом процессе,
связанном с пользователем. LUID идентифицирует пользователя, от-
ветственного за сессию процесса. LUID процесса, будучи однажды
проставлен, не может быть изменен никем. Дочерние процессы нас-
ледуют родительский LUID.
Дискреционное управление доступом
Средства дискреционного управления доступом позволяют опре-
делить, имеет ли некоторый пользователь доступ к информации, ко-
торую он хочет получить. Эта информация находится внутри некото-
рого объекта (файла, устройства и т.д.), которым пользователь-
ский процесс пытается воспользоваться. В большинстве систем UNIX
защита объекта осуществляется через взаимосвязь между пользова-
телем и группой процесса, с одной стороны, и битами режимов объ-
екта (владелец, группа, прочие), с другой стороны. Атрибуты за-
щиты для этих объектов находятся на усмотрении владельца объек-
та. Поэтому эти атрибуты владелец может сделать ограничивающими
(контролируемый доступ) или разрешающими (открытый доступ). В
надежной системе UNIX стандартные правила дискреционного управ-
ления доступом расширены так, что они обеспечивают более полную
защиту системной информации (системных баз данных), разделяемой
информации (временных каталогов) и входных файлов программы SUID
(установка идентификатора пользователя при выполнении) - напри-
мер, сообщения почты.
Помимо этого, в дискреционную стратегию доступа для UNIX
добавлен механизм, который может воспрепятствовать получению
программой SUID доступа к файлам запустившего ее пользователя.
Пользователь может создать промен (promain - protected domain,
т.е. защищенный домен). Промен является иерархией каталогов
(поддеревом). Когда пользователь запускает программу SUID, она
может произвести доступ к своим личным файлам только в том слу-
чае, если эти файлы находятся в упомянутом поддереве. Вне проме-
.
- 5-5 -
на программа SUID имеет доступ только к тем файлам, к которым
имеют доступ и активизатор программы, и ее владелец. Это сужает
рамки разрушения, которое может быть вызвано программой SUID в
данном каталоге. Такой механизм подробно описывается в странице
Руководства для promain(M) в "Справочнике пользователя" (User's
Reference).
Авторизации
Авторизация - это право на доступ к некоторому объекту или
на выполнение какого-либо системного действия. В большинстве
систем UNIX все решения по поводу доступа принимаются на основе
простых дискреционных критериев, или исходя из того, является ли
root владельцем процесса, осуществляющего доступ. Корневой бюд-
жет имеет полномочия на выполнение таких системных действий, ка-
кие не может выполнять никакой другой процесс. Операционная Сис-
тема определяет два типа авторизаций: авторизации ядра и
авторизации подсистемы. Авторизации ядра связаны с процессами.
(Процесс - это программа, выполняющаяся в системе в данный мо-
мент.) Они разрешают процессу выполнять определенные действия,
если процесс наделен требуемыми привилегиями. Авторизации под-
системы связаны с пользователями. Они позволяют пользователю вы-
полнять специальные действия с помощью команд подсистемы (надеж-
ные утилиты и программы). Подсистема - это связный набор файлов,
устройств и команд, служащих для выполнения некоторой функции.
Например, подсистема lp состоит из файлов блока подкачки печати,
печатающих устройств и команд, помогающих сопровождать подсисте-
му, таких как lpadmin(ADM).
Авторизации ядра хранятся в авторизационном наборе, который
сопоставляется каждому процессу. Авторизационный набор - это
список привилегий, который разрешает некоторый тип действий при
наличии определенной привилегии и запрещает в ее отсутствие. Ав-
торизации будут рассмотрены позже.
Установление идентичности и аутентичности (I&A)
Когда пользователь регистрируется в малонадежной системе
UNIX, выполняется ограниченная процедура установления идентич-
ности и аутентичности. Система ищет имя пользователя в базе дан-
ных паролей (/etc/passwd). Если имя пользователя отыскивается,
система устанавливает аутентичность пользователя, сравнивая вве-
денный пароль с шифрованной версией пароля, содержащейся в стро-
ке базы данных паролей пользователя. Предусмотрены некоторые
правила относительно характеристик пароля и возможности его из-
менения, но, как показала практика, этих правил недостаточно для
предохранения от проникновения через защиту.
Надежная система расширяет стандартные механизмы I&A. В ней
предусмотрено больше правил, касающихся типов используемых паро-
лей. Имеются процедуры генерации и изменения паролей. Изменены
местоположение и механизм защиты некоторых частей базы данных
паролей. И, наконец, администратор теперь обладает большими воз-
можностями контроля над действиями пользователей. Для обеспече-
ния этого аспекта системы создана специальная роль - Администра-
тор аутентификации (авторизация подсистемы auth). Обязанности
этого администратора подробно описываются в последующих разделах.
.
- 5-6 -
Контроль (audit)
В большинстве систем UNIX ведется ограниченная регистрация
системных действий с помощью соответствующей учетной подсистемы.
Учетная подсистема пишет одну учетную запись при завершении каж-
дого пользовательского процесса. Надежная операционная система
обеспечивает продолжительный ряд записей о действиях - журнал
(trail). В этот журнал заносится запись о каждом доступе, осу-
ществляемом между субъектом и объектом, и о каждом изменении
субъекта, объекта и системных характеристик. Подсистема контроля
управляется специальной ролью, называемой Администратором конт-
роля (авторизация подсистемы audit). Администратор контроля ре-
шает, сколько информации следует записать и насколько надежно
она записывается, а также сопровождает информацию, когда она
собрана. Подсистема контроля предоставляет Администратору конт-
роля обширную историю системных действий. Это помогает админист-
ратору идентифицировать, что произошло в системе, когда и с чьим
участием.
Защищенные подсистемы
В системах UNIX существуют механизмы setuid - установка
идентификатора пользователя (SUID) - и setgid - установка иден-
тификатора группы (SGID). С их помощью можно составлять програм-
мы, обеспечивающие личную информацию. Доступ к этой информации и
ее изменение разрешены только операциям, включенным в данные
программы. Операционная Система определяет несколько защищенных
подсистем. Каждая из таких подсистем состоит из совокупности
личной информации (файлы и/или базы данных), любых связанных с
ними устройств, а также утилит и команд, используемых для сопро-
вождения этой информации. Защищенные подсистемы пользуются меха-
низмами SUID/SGID для защиты своих личных файлов, баз данных и
устройств от неограниченного доступа. Операционная Система рас-
ширяет понятие защищенной подсистемы в нескольких аспектах:
* в ней определена большая грануляция пользователей и
групп, обеспечивающих определенные наборы системных ресурсов
(личная информация);
* она ведет специальную базу данных для пользователей, ко-
торым разрешено выполнять программы, сопровождающие личную ин-
формацию;
* в ней не требуется, чтобы пользователи регистрировались в
качестве администратора подсистемы; вместо этого используется
база данных для проверки авторизации подсистемы. Этого достаточ-
но для удовлетворения всех требований относительно полной учиты-
ваемости любых действий, выполняемых программами подсистемы.
.
- 5-7 -
РАБОТА НАДЕЖНОЙ СИСТЕМЫ
В данном разделе обсуждается концептуальная структура соп-
ровождения надежной системы. Первое основное решение, которое вы
должны принять, - кто будет ее сопровождать. Вы можете иметь од-
ного всемогущего супер-пользователя, зарегистрированного как
root, или можно распределить административные обязанности между
|