Шкала
ограничений в восьмеричном виде
|
Описание
|
04000
|
Устанавливать
идентификатор пользователя-владельца при выполнении файла.
|
020n0
|
При n = 7, 5, 3
или 1 устанавливать идентификатор группы владельца при выполнении файла. При
n = 6, 4, 2 или 0 разрешается блокирование диапазонов адресов файла.
|
01000
|
Сохранять в
области подкачки образ кодового сегмента выполняемого файла после конца его
выполнения.
|
00400
|
Владельцу файла
разрешено чтение файла.
|
00200
|
Владелец файла
может дополнять или модифицировать файл.
|
00100
|
Владелец файла
может его исполнять, если файл - исполняемый, или производить в нем поиск,
если это файл-каталог.
|
00040
|
Все
пользователи группы владельца могут читать файл.
|
00020
|
Все
пользователи группы владельца могут дополнять или модифицировать файл.
|
00010
|
Все
пользователи группы владельца могут исполнять файл, если файл - исполняемый,
или производить в нем поиск, если это файл-каталог.
|
00004
|
Все
пользователи могут читать файл.
|
00002
|
Все
пользователи могут дополнять или модифицировать файл.
|
00001
|
Все
пользователи могут исполнять файл, если файл - исполняемый, или производить в
нем поиск, если это файл-каталог.
|
1.6
Организация контроля доступа в ОС UNIX
В ОС UNIX права доступа к файлу или каталогу определяются для
трех субъектов:
· владельца файла
(идентификатор User ID, UID);
· членов группы, к которой
принадлежит владелец (Group ID, GID);
· всех остальных
пользователей системы.
С учетом того что в UNIX определены всего три операции над
файлами и каталогами (чтение, запись, выполнение), характеристики безопасности
файла включают девять признаков, задающих возможность выполнения каждой из трех
операций для каждого из трех субъектов доступа. Например, если владелец файла
разрешил себе выполнение всех трех операций, для членов группы - чтение и
выполнение, а для всех остальных пользователей - только выполнение, то девять
характеристик безопасности файла выглядят следующим образом: rwx r-х r.
Здесь г, w и х обозначают операции чтения, записи и
выполнения соответственно. Именно в таком виде выводит информацию о правах
доступа к файлам команда просмотра содержимого каталога 1 s. Суперпользователю
UNIX все виды доступа позволены всегда, поэтому его идентификатор (он имеет
значение 0) не фигурирует в списках управления доступом.
С каждым процессом UNIX связаны два идентификатора:
пользователя, от имени которого был создан этот процесс, и группы, к которой
принадлежит данный пользователь. Эти идентификаторы носят название реальных
идентификаторов пользователя: Real User ID, RUID и реальных идентификаторов
группы: Real Group ID, RGID. Однако при проверке прав доступа к файлу
используются не эти идентификаторы, а так называемые эффективные идентификаторы
пользователя: Effective User ID, EUID и эффективные идентификаторы группы:
Effective Group ID, EGID (рис.2).
Рис.2 Проверка прав доступа в UNIX
Введение эффективных идентификаторов позволяет процессу
выступать в некоторых случаях от имени пользователя и группы, отличных от тех,
которые ему достались при рождении. В исходном состоянии эффективные
идентификаторы совпадают с реальными.
Случаи, когда процесс выполняет системный вызов ехес запуска
приложения, хранящегося в некотором файле, в UNIX связаны со сменой процессом
исполняемого кода. В рамках данного процесса начинает выполняться новый код, и
если в характеристиках безопасности этого файла указаны признаки разрешения
смены идентификаторов пользователя и группы, то происходит смена эффективных
идентификаторов процесса. Файл имеет два признака разрешения смены
идентификатора - Set User ID on execution (SUID) и Set Group ID on execution (SGID),
которые разрешают смену идентификаторов пользователя и группы при выполнении
данного файла.
Механизм эффективных идентификаторов позволяет пользователю
получать некоторые виды доступа, которые ему явно не разрешены, но только с
помощью вполне ограниченного набора приложений, хранящихся в файлах с
установленными признаками смены идентификаторов. Пример такой ситуации приведен
на рис.3.
Первоначально процесс А имел эффективные идентификаторы
пользователя и группы (12 и 23 соответственно), совпадающие с реальными. На
каком-то этапе работы процесс запросил выполнение приложения из файла b. ехе.
Процесс может выполнить файл b. ехе, хотя его эффективные идентификаторы не
совпадают с идентификатором владельца и группы файла, так как выполнение
разрешено всем пользователям.
Рис.3 Смена эффективных идентификаторов процесса
Файл Ь. ехе имеет установленные признаки смены
идентификаторов SUID и SGID, поэтому одновременно со сменой кода процесс меняет
и значения эффективных идентификаторов (35 и 47). Вследствие этого при
последующей попытке записать данные в файл f 1. doc процессу А это удается, так
как его новый эффективный идентификатор группы совпадает с идентификатором
группы файла f1. doc. Без смены идентификаторов эта операция для процесса А
была бы запрещена.
Описанный механизм преследует те же цели, что и рассмотренный
выше механизм подчиненных сегментов процессора Pentium.
Использование модели файла как универсальной модели
разделяемого ресурса позволяет в UNIX применять одни и те же механизмы для
контроля доступа к файлам, каталогам, принтерам, терминалам и разделяемым
сегментам памяти.
Система управления доступом ОС UNIX была разработана в 70-е
годы и с тех пор мало изменилась. Эта достаточно простая система позволяет во
многих случаях решить поставленные перед администратором задачи по
предотвращению несанкционированного доступа, однако такое решение иногда
требует слишком больших ухищрений или же вовсе не может быть реализовано.
Идентификация и аутентификация
Для начала рассмотрим проблему контроля доступа в систему.
Наиболее распространенным способом контроля доступа является процедура
регистрации. Обычно каждый пользователь в системе имеет уникальный
идентификатор. Идентификаторы пользователей применяются с той же целью, что и
идентификаторы любых других объектов, файлов, процессов. Идентификация
заключается в сообщении пользователем своего идентификатора. Для того чтобы
установить, что пользователь именно тот, за кого себя выдает, то есть что
именно ему принадлежит введенный идентификатор, в информационных системах
предусмотрена процедура аутентификации (authentication, опознавание, в переводе
с латинского означает "установление подлинности"), задача которой -
предотвращение доступа к системе нежелательных лиц.
Обычно аутентификация базируется на одном или более из трех
пунктов:
· то, чем пользователь
владеет (ключ или магнитная карта);
· то, что пользователь
знает (пароль);
· атрибуты пользователя
(отпечатки пальцев, подпись, голос).
1.7 Пароли,
уязвимость паролей
Наиболее простой подход к аутентификации - применение
пользовательского пароля.
Когда пользователь идентифицирует себя при помощи уникального
идентификатора или имени, у него запрашивается пароль. Если пароль, сообщенный
пользователем, совпадает с паролем, хранящимся в системе, система предполагает,
что пользователь легитимен. Пароли часто используются для защиты объектов в
компьютерной системе в отсутствие более сложных схем защиты.
Недостатки паролей связаны с тем, что трудно сохранить баланс
между удобством пароля для пользователя и его надежностью. Пароли могут быть
угаданы, случайно показаны или нелегально переданы авторизованным пользователем
неавторизованному.
Есть два общих способа угадать пароль. Один связан со сбором
информации о пользователе. Люди обычно используют в качестве паролей очевидную
информацию (скажем, имена животных или номерные знаки автомобилей). Для
иллюстрации важности разумной политики назначения идентификаторов и паролей
можно привести данные исследований, проведенных в AT&T, показывающие, что
из 500 попыток несанкционированного доступа около 300 составляют попытки
угадывания паролей или беспарольного входа по пользовательским именам guest,
demo и т.д.
Другой способ - попытаться перебрать все наиболее вероятные
комбинации букв, чисел и знаков пунктуации (атака по словарю). Например, четыре
десятичные цифры дают только 10 000 вариантов, более длинные пароли, введенные
с учетом регистра символов и пунктуации, не столь уязвимы, но тем не менее
таким способом удается разгадать до 25% паролей. Чтобы заставить пользователя
выбрать трудноугадываемый пароль, во многих системах внедрена реактивная
проверка паролей, которая при помощи собственной программы-взломщика паролей
может оценить качество пароля, введенного пользователем.
Несмотря на все это, пароли распространены, поскольку они
удобны и легко реализуемы.
1.8
Шифрование пароля
Для хранения секретного списка паролей на диске во многих ОС
используется криптография. Система задействует одностороннюю функцию, которую
просто вычислить, но для которой чрезвычайно трудно (разработчики надеются, что
невозможно) подобрать обратную функцию.
Например, в ряде версий Unix в качестве односторонней функции
используется модифицированный вариант алгоритма DES. Введенный пароль длиной до
8 знаков преобразуется в 56-битовое значение, которое служит входным параметром
для процедуры crypt (), основанной на этом алгоритме. Результат шифрования
зависит не только от введенного пароля, но и от случайной последовательности
битов, называемой привязкой (переменная salt). Это сделано для того, чтобы
решить проблему совпадающих паролей. Очевидно, что саму привязку после
шифрования необходимо сохранять, иначе процесс не удастся повторить.
Модифицированный алгоритм DES выполняется, имея входное значение в виде
64-битового блока нулей, с использованием пароля в качестве ключа, а на каждой
следующей итерации входным параметром служит результат предыдущей итерации.
Всего процедура повторяется 25 раз. Полученное 64-битовое значение
преобразуется в 11 символов и хранится рядом с открытой переменной salt.
В ОС Windows NT преобразование исходного пароля также
осуществляется многократным применением алгоритма DES и алгоритма MD4.
Хранятся только кодированные пароли. В процессе
аутентификации представленный пользователем пароль кодируется и сравнивается с
хранящимися на диске. Таким образом, файл паролей нет необходимости держать в
секрете.
При удаленном доступе к ОС нежелательна передача пароля по
сети в открытом виде. Одним из типовых решений является использование
криптографических протоколов. В качестве примера можно рассмотреть протокол
опознавания с подтверждением установления связи путем вызова - CHAP (Challenge
Handshake Authentication Protocol).
Опознавание достигается за счет проверки того, что у
пользователя, осуществляющего доступ к серверу, имеется секретный пароль,
который уже известен серверу. Пользователь инициирует диалог, передавая серверу
свой идентификатор. В ответ сервер посылает пользователю запрос (вызов),
состоящий из идентифицирующего кода, случайного числа и имени узла сервера или
имени пользователя. При этом пользовательское оборудование в результате запроса
пароля пользователя отвечает следующим ответом, зашифрованным с помощью
алгоритма одностороннего хеширования, наиболее распространенным видом которого
является MD5. После получения ответа сервер при помощи той же функции с теми же
аргументами шифрует собственную версию пароля пользователя. В случае совпадения
результатов вход в систему разрешается. Существенно, что незашифрованный пароль
при этом по каналу связи не посылается.
В микротелефонных трубках используется аналогичный метод.
В системах, работающих с большим количеством пользователей,
когда хранение всех паролей затруднительно, применяются для опознавания
сертификаты, выданные доверенной стороной.
1.9
Авторизация. Разграничение доступа к объектам ОС
После успешной регистрации система должна осуществлять
авторизацию (authorization) - предоставление субъекту прав на доступ к объекту.
Средства авторизации контролируют доступ легальных пользователей к ресурсам
системы, предоставляя каждому из них именно те права, которые были определены
администратором, а также осуществляют контроль возможности выполнения
пользователем различных системных функций. Система контроля базируется на общей
модели, называемой матрицей доступа. Рассмотрим ее более подробно.
Как уже говорилось в предыдущей лекции, компьютерная система
может быть смоделирована как набор субъектов (процессы, пользователи) и
объектов. Под объектами мы понимаем как ресурсы оборудования (процессор, сегменты
памяти, принтер, диски и ленты), так и программные ресурсы (файлы, программы,
семафоры), то есть все то, доступ к чему контролируется. Каждый объект имеет
уникальное имя, отличающее его от других объектов в системе, и каждый из них
может быть доступен через хорошо определенные и значимые операции.
Операции зависят от объектов. Hапример, процессор может
только выполнять команды, сегменты памяти могут быть записаны и прочитаны,
считыватель магнитных карт может только читать, а файлы данных могут быть записаны,
прочитаны, переименованы и т.д.
Желательно добиться того, чтобы процесс осуществлял
авторизованный доступ только к тем ресурсам, которые ему нужны для выполнения
его задачи. Это требование минимума привилегий, уже упомянутое в предыдущей
лекции, полезно с точки зрения ограничения количества повреждений, которые
процесс может нанести системе. Hапример, когда процесс P вызывает процедуру А,
ей должен быть разрешен доступ только к переменным и формальным параметрам,
переданным ей, она не должна иметь возможность влиять на другие переменные
процесса. Аналогично компилятор не должен оказывать влияния на произвольные
файлы, а только на их хорошо определенное подмножество (исходные файлы,
листинги и др.), имеющее отношение к компиляции. С другой стороны, компилятор
может иметь личные файлы, используемые для оптимизационных целей, к которым
процесс Р не имеет доступа.
Различают дискреционный (избирательный) способ управления
доступом и полномочный (мандатный).
При дискреционном доступе, подробно рассмотренном ниже,
определенные операции над конкретным ресурсом запрещаются или разрешаются
субъектам или группам субъектов. С концептуальной точки зрения текущее
состояние прав доступа при дискреционном управлении описывается матрицей, в
строках которой перечислены субъекты, в столбцах - объекты, а в ячейках -
операции, которые субъект может выполнить над объектом.
Полномочный подход заключается в том, что все объекты могут
иметь уровни секретности, а все субъекты делятся на группы, образующие иерархию
в соответствии с уровнем допуска к информации. Иногда это называют моделью
многоуровневой безопасности, которая должна обеспечивать выполнение следующих
правил.
· Простое свойство
секретности. Субъект может читать информацию только из объекта, уровень
секретности которого не выше уровня секретности субъекта. Генерал читает
документы лейтенанта, но не наоборот.
· Свойство. Субъект может
записывать информацию в объекты только своего уровня или более высоких уровней
секретности. Генерал не может случайно разгласить нижним чинам секретную
информацию.
Некоторые авторы утверждают, что последнее требование
называют *-свойством, потому что в оригинальном докладе не смогли придумать для
него подходящего названия. В итоге во все последующие документы и монографии
оно вошло как свойство.
Отметим, что данная модель разработана для хранения секретов,
но не гарантирует целостности данных. Например, здесь лейтенант имеет право
писать в файлы генерала.
Большинство операционных систем реализуют именно
дискреционное управление доступом. Главное его достоинство - гибкость, основные
недостатки - рассредоточенность управления и сложность централизованного
контроля.
1.10 Домены
безопасности
Чтобы рассмотреть схему дискреционного доступа более детально,
введем концепцию домена безопасности (protection domain). Каждый домен
определяет набор объектов и типов операций, которые могут производиться над
каждым объектом. Возможность выполнять операции над объектом есть права
доступа, каждое из которых есть упорядоченная пара <object-name, rights-set>.
Домен, таким образом, есть набор прав доступа. Hапример, если домен D имеет
права доступа <file F, {read, write}>, это означает, что процесс,
выполняемый в домене D, может читать или писать в файл F, но не может выполнять
других операций над этим объектом. Пример доменов можно увидеть на рис.4
<#"519710.files/image003.gif">
Рис.4
Специфицирование прав доступа к ресурсам
Связь конкретных субъектов, функционирующих в операционных
системах, может быть организована следующим образом.
· Каждый пользователь может
быть доменом. В этом случае набор объектов, к которым может быть организован
доступ, зависит от идентификации пользователя.
· Каждый процесс может быть
доменом. В этом случае набор доступных объектов определяется идентификацией
процесса.
· Каждая процедура может
быть доменом. В этом случае набор доступных объектов соответствует локальным
переменным, определенным внутри процедуры. Заметим, что когда процедура
выполнена, происходит смена домена.
Рассмотрим стандартную двухрежимную модель выполнения ОС.
Когда процесс выполняется в режиме системы (kernel mode), он может выполнять
привилегированные инструкции и иметь полный контроль над компьютерной системой.
С другой стороны, если процесс выполняется в пользовательском режиме, он может
вызывать только непривилегированные инструкции. Следовательно, он может
выполняться только внутри предопределенного пространства памяти. Наличие этих
двух режимов позволяет защитить ОС (kernel domain) от пользовательских
процессов (выполняющихся в user domain). В мультипрограммных системах двух
доменов недостаточно, так как появляется необходимость защиты пользователей
друг от друга. Поэтому требуется более тщательно разработанная схема.
В ОС Unix домен связан с пользователем. Каждый пользователь
обычно работает со своим набором объектов.
1.11 Матрица
доступа
Модель безопасности, специфицированная в предыдущем разделе (см.
рис.4 <http://www.excode.ru/2.html>), имеет вид матрицы, которая
называется матрицей доступа. Какова может быть эффективная реализация матрицы
доступа? В общем случае она будет разреженной, то есть большинство ее клеток
будут пустыми. Хотя существуют структуры данных для представления разреженной
матрицы, они не слишком полезны для приложений, использующих возможности
защиты. Поэтому на практике матрица доступа применяется редко. Эту матрицу можно
разложить по столбцам, в результате чего получаются списки прав доступа
(access control list - ACL). В результате разложения по строкам получаются
мандаты возможностей (capability list или capability tickets).
1.12 Список
прав доступа. Access control list
Каждая колонка в матрице может быть реализована как список
доступа для одного объекта. Очевидно, что пустые клетки могут не учитываться. В
результате для каждого объекта имеем список упорядоченных пар <domain,
rights-set>, который определяет все домены с непустыми наборами прав для
данного объекта.
Элементами списка могут быть процессы, пользователи или
группы пользователей. При реализации широко применяется предоставление доступа
по умолчанию для пользователей, права которых не указаны. Например, в Unix все
субъекты-пользователи разделены на три группы (владелец, группа и остальные), и
для членов каждой группы контролируются операции чтения, записи и исполнения
(rwx). В итоге имеем ACL - 9-битный код, который является атрибутом разнообразных
объектов Unix.
1.13. Мандаты
возможностей. Capability list
Как отмечалось выше, если матрицу доступа хранить по строкам,
то есть если каждый субъект хранит список объектов и для каждого объекта -
список допустимых операций, то такой способ хранения называется
"мандаты" или "перечни возможностей" (capability list).
Каждый пользователь обладает несколькими мандатами и может иметь право
передавать их другим. Мандаты могут быть рассеяны по системе и вследствие этого
представлять большую угрозу для безопасности, чем списки контроля доступа. Их
хранение должно быть тщательно продумано.
Примерами систем, использующих перечни возможностей, являются
Hydra, Cambridge CAP System.
1.14 Другие
способы контроля доступа
Иногда применяется комбинированный способ. Например, в
том же Unix на этапе открытия файла происходит анализ ACL (операция open). В
случае благоприятного исхода файл заносится в список открытых процессом файлов,
и при последующих операциях чтения и записи проверки прав доступа не
происходит. Список открытых файлов можно рассматривать как перечень
возможностей.
Существует также схема lock-key, которая является
компромиссом между списками прав доступа и перечнями возможностей. В этой схеме
каждый объект имеет список уникальных битовых шаблонов (patterns), называемых
locks. Аналогично каждый домен имеет список уникальных битовых шаблонов,
называемых ключами (keys). Процесс, выполняющийся в домене, может получить
доступ к объекту, только если домен имеет ключ, который соответствует одному из
шаблонов объекта.
Как и в случае мандатов, список ключей для домена должен
управляться ОС. Пользователям не разрешается проверять или модифицировать
списки ключей (или шаблонов) непосредственно.
1.15 Смена
домена
В большинстве ОС для определения домена применяются
идентификаторы пользователей. Обычно переключение между доменами происходит,
когда меняется пользователь. Но почти все системы нуждаются в дополнительных
механизмах смены домена, которые используются, когда некая привилегированная
возможность необходима большому количеству пользователей. Hапример, может
понадобиться разрешить пользователям иметь доступ к сети, не заставляя их
писать собственные сетевые программы. В таких случаях для процессов ОС Unix
предусмотрена установка бита set-uid. В результате установки этого бита
в сетевой программе она получает привилегии ее создателя (а не пользователя),
заставляя домен меняться на время ее выполнения. Таким образом, рядовой
пользователь может получить нужные привилегии для доступа к сети.
1.16
Недопустимость повторного использования объектов
Контроль повторного использования объекта предназначен для
предотвращения попыток незаконного получения конфиденциальной информации,
остатки которой могли сохраниться в некоторых объектах, ранее использовавшихся
и освобожденных другим пользователем. Безопасность повторного применения должна
гарантироваться для областей оперативной памяти (в частности, для буферов с
образами экрана, расшифрованными паролями и т.п.), для дисковых блоков и
магнитных носителей в целом. Очистка должна производиться путем записи
маскирующей информации в объект при его освобождении (перераспределении).
Hапример, для дисков на практике применяется способ двойной перезаписи
освободившихся после удаления файлов блоков случайной битовой последовательностью.
1.17
Выявление вторжений. Аудит системы защиты
Даже самая лучшая система защиты рано или поздно будет
взломана. Обнаружение попыток вторжения является важнейшей задачей системы
защиты, поскольку ее решение позволяет минимизировать ущерб от взлома и собирать
информацию о методах вторжения. Как правило, поведение взломщика отличается от
поведения легального пользователя. Иногда эти различия можно выразить
количественно, например подсчитывая число некорректных вводов пароля во время
регистрации.
Основным инструментом выявления вторжений является запись
данных аудита. Отдельные действия пользователей протоколируются, а полученный
протокол используется для выявления вторжений.
Аудит, таким образом, заключается в регистрации специальных
данных о различных типах событий, происходящих в системе и так или иначе
влияющих на состояние безопасности компьютерной системы. К числу таких событий
обычно причисляют следующие:
· вход или выход из
системы;
· операции с файлами
(открыть, закрыть, переименовать, удалить);
· обращение к удаленной
системе;
· смена привилегий или иных
атрибутов безопасности (режима доступа, уровня благонадежности пользователя и
т.п.).
Если фиксировать все события, объем регистрационной
информации, скорее всего, будет расти слишком быстро, а ее эффективный анализ
станет невозможным. Следует предусматривать наличие средств выборочного
протоколирования как в отношении пользователей, когда слежение осуществляется
только за подозрительными личностями, так и в отношении событий. Слежка важна в
первую очередь как профилактическое средство. Можно надеяться, что многие
воздержатся от нарушений безопасности, зная, что их действия фиксируются.
Помимо протоколирования, можно периодически сканировать
систему на наличие слабых мест в системе безопасности. Такое сканирование может
проверить разнообразные аспекты системы:
· короткие или легкие
пароли;
· неавторизованные set-uid
программы, если система поддерживает этот механизм;
· неавторизованные
программы в системных директориях;
· долго выполняющиеся
программы;
· нелогичная защита как
пользовательских, так и системных директорий и файлов. Примером нелогичной
защиты может быть файл, который запрещено читать его автору, но в который
разрешено записывать информацию постороннему пользователю;
· потенциально опасные списки
поиска файлов, которые могут привести к запуску "троянского коня";
· изменения в системных
программах, обнаруженные при помощи контрольных сумм.
Любая проблема, обнаруженная сканером безопасности, может
быть как ликвидирована автоматически, так и передана для решения менеджеру
системы.
1.18 Анализ
некоторых популярных ОС с точки зрения их защищенности
Итак, ОС должна способствовать реализации мер безопасности
или непосредственно поддерживать их. Примерами подобных решений в рамках
аппаратуры и операционной системы могут быть:
· разделение команд по
уровням привилегированности;
· сегментация адресного
пространства процессов и организация защиты сегментов;
· защита различных
процессов от взаимного влияния за счет выделения каждому своего виртуального пространства;
· особая защита ядра ОС;
· контроль повторного
использования объекта;
· наличие средств
управления доступом;
· структурированность
системы, явное выделение надежной вычислительной базы (совокупности защищенных
компонентов), обеспечение компактности этой базы;
· следование принципу
минимизации привилегий - каждому компоненту дается ровно столько привилегий,
сколько необходимо для выполнения им своих функций.
Большое значение имеет структура файловой системы. Hапример,
в ОС с дискреционным контролем доступа каждый файл должен храниться вместе с
дискреционным списком прав доступа к нему, а, например, при копировании файла
все атрибуты, в том числе и ACL, должны быть автоматически скопированы вместе с
телом файла.
В принципе, меры безопасности не обязательно должны быть
заранее встроены в ОС - достаточно принципиальной возможности дополнительной
установки защитных продуктов. Так, сугубо ненадежная система MS-DOS может быть
усовершенствована за счет средств проверки паролей доступа к компьютеру и/или
жесткому диску, за счет борьбы с вирусами путем отслеживания попыток записи в
загрузочный сектор CMOS-средствами и т.п. Тем не менее по-настоящему надежная
система должна изначально проектироваться с акцентом на механизмы безопасности.
Рост популярности Unix и все большая осведомленность о
проблемах безопасности привели к осознанию необходимости достичь приемлемого
уровня безопасности ОС, сохранив при этом мобильность, гибкость и открытость
программных продуктов. В Unix есть несколько уязвимых с точки зрения
безопасности мест, хорошо известных опытным пользователям, вытекающих из самой
природы Unix. Однако хорошее системное администрирование может ограничить эту
уязвимость.
Относительно защищенности Unix сведения противоречивы. В Unix
изначально были заложены идентификация пользователей и разграничение доступа.
Как оказалось, средства защиты данных в Unix могут быть доработаны, и сегодня
можно утверждать, что многие клоны Unix по всем параметрам соответствуют классу
безопасности C2.
Обычно, говоря о защищенности Unix, рассматривают
защищенность автоматизированных систем, одним из компонентов которых является
Unix-сервер. Безопасность такой системы увязывается с защитой глобальных и
локальных сетей, безопасностью удаленных сервисов типа telnet и rlogin/rsh и аутентификацией
в сетевой конфигурации, безопасностью X Window-приложений. Hа системном уровне
важно наличие средств идентификации и аудита.
В Unix существует список именованных пользователей, в
соответствии с которым может быть построена система разграничения доступа.
В ОС Unix считается, что информация, нуждающаяся в защите,
находится главным образом в файлах.
По отношению к конкретному файлу все пользователи делятся на
три категории:
· владелец файла;
· члены группы владельца;
· прочие пользователи.
Для каждой из этих категорий режим доступа определяет права
на операции с файлом, а именно:
· право на чтение;
· право на запись;
· право на выполнение (для
каталогов - право на поиск).
В итоге девяти (3х3) битов защиты оказывается достаточно,
чтобы специфицировать ACL каждого файла.
Аналогичным образом защищены и другие объекты ОС Unix,
например семафоры, сегменты разделяемой памяти и т.п.
Указанных видов прав достаточно, чтобы определить
допустимость любой операции с файлами. Например, для удаления файла необходимо
иметь право на запись в соответствующий каталог. Как уже говорилось, права
доступа к файлу проверяются только на этапе открытия. При последующих операциях
чтения и записи проверка не выполняется. В результате, если режим доступа к
файлу меняется после того, как файл был открыт, это не сказывается на
процессах, уже открывших этот файл. Данное обстоятельство является уязвимым с
точки зрения безопасности местом.
Наличие всего трех видов субъектов доступа: владелец, группа,
все остальные - затрудняет задание прав "с точностью до
пользователя", особенно в случае больших конфигураций. В популярной
разновидности Unix - Solaris имеется возможность использовать списки управления
доступом (ACL), позволяющие индивидуально устанавливать права доступа отдельных
пользователей или групп.
Среди всех пользователей особое положение занимает
пользователь root, обладающий максимальными привилегиями. Обычные правила
разграничения доступа к нему не применяются - ему доступна вся информация на
компьютере.
В Unix имеются инструменты системного аудита -
хронологическая запись событий, имеющих отношение к безопасности. К таким
событиям обычно относят: обращения программ к отдельным серверам; события,
связанные с входом/выходом в систему и другие. Обычно регистрационные действия
выполняются специализированным syslog-демоном, который проводит запись событий
в регистрационный журнал в соответствии с текущей конфигурацией. Syslog-демон
стартует в процессе загрузки системы.
Таким образом, безопасность ОС Unix может быть доведена до
соответствия классу C2. Однако разработка на ее основе автоматизированных
систем более высокого класса защищенности может быть сопряжена с большими
трудозатратами.
2.
Аналитическая часть
2.1 Общие
сведения о матричных принтерах
Матричный принтер (Dot-Matrix-Printer) -
старейший из ныне применяемых типов принтеров, был изобретён в 1964 году
корпорацией Seiko Epson.
Принцип работы матричного принтера
следующий. Изображение формируется с помощью печатающей головки, которая
представляет собой один или два ряда вертикально расположенных тонких иголок
(игольчатая матрица), приводимых в действие электромагнитами. Головка
устанавливается на ракетке и передвигается построчно вдоль листа, при этом
иголки в нужный момент времени ударяют через красящую ленту по бумаге, формируя
точечное изображение. Этот тип принтеров называется SIDM (англ. Serial Impact
Dot Matrix - последовательные ударно-матричные принтеры).
Существуют принтеры с 9, 12, 14, 18 и 24
иголками в головке. Основное распространение получили 9-ти (дешевые модели) и
24-х игольчатые принтеры. Качество печати и скорость графической печати зависят
от числа иголок: больше иголок - больше точек. Качество печати в 9-ти
игольчатых принтерах улучшается при печати информации не в один, а в два или
четыре прохода печатающей головки вдоль печатаемой строки. Более качественная и
быстрая печать обеспечивается 24-игольчатыми принтерами, называемыми LQ (англ.
Letter Quality - качество пишущей машинки). Однако эти принтеры не только более
дорогостоящи, но и менее надежны, а также замена вышедших из строя печатающих
головок представляет определенные трудности.
Существуют монохромные пятицветные
матричные принтеры, в которых используется 4 цветная CMYK лента. Смена цвета
производится смещением ленты вверх-вниз относительно печатающей головки.
Для перемещения красящей ленты
используется передаточный механизм, использующий движение каретки. За
перемещение каретки отвечает шаговой двигатель. Еще один шаговой двигатель
отвечает за перемещение бумагоопорного валика. Именно поэтому скорость печати
матричных принтеров невысока. В зависимости от выбранного качества печати и
модели принтера скорость печати составляет от 10 до 60 секунд на страницу.
Скорость печати матричных принтеров измеряется в CPS (англ. characters per
second - символах в секунду).
Матричные принтеры оборудованы внутренней
памятью (буфером) для хранения данных, полученных от персонального компьютера.
Объем памяти недорогих принтеров составляет от 4 до 64 Кбайт. Хотя существуют
модели, имеющие и больший объем памяти (например, Seikosha SP-2415 имеет буфер
размером 175 Кбайт).
2.2
Проектирование символов для матричных принтеров
Матричные принтеры поставляются с несколькими типовыми
начертаниями символов (прямое, полужирное, наклонное) и несколькими вариантами
литер (престиж, оратор, скрипт и пр.). позволяющих воспроизводить тексты с
латинским алфавитом. Такие шрифты называют встроенными.
Описание встроенных шрифтов хранится в постоянном
запоминающем устройстве принтера и в любой момент доступно для применения.
Однако не всегда стандартный набор символов достаточен для воспроизведения
нужного текста. Особенно это характерно для документов специализированного
характера, требующих некоторых специфических знаков (например, символов
русского или других национальных алфавитов, условные обозначения географических
элементов, знаков диаграмм шахматных позиций и т.п.). Для этих случаев в
системе команд принтера предусматривается возможность конструирования
недостающих символов, сохранения их в оперативной памяти принтера и воспроизведения
в момент печати. Шрифты подобного вида называют загружаемыми.
Загружаемые шрифты становятся доступными только после
размещения нх описания в оперативную памяти принтера н могут воспроизводиться
только до конца текущего сеанса (до выключения питания принтера) или до момента
загрузки в оперативную память принтера описания другого шрифта.
Проектирование и воспроизведение произвольных литер состоит
нз следующих этапов:
. Сначала изображается кривая, образующую литеру.
. Далее рассчитываются данные, необходимые для описания
кривой.
. Затем эти данные посылаются в оперативную память принтера
для связи описание символа с определенным кодом.
. Принтеру дается команда напечатать данную литеру вместо
той, которую он воспроизводит в соответствии с описанием для этого же кода из
постоянной памяти.
Рассмотрим механизм формирования символов на примере принтера
Epson LX1050. Этот матричный
принтер имеет печатающую головку с 24 иголками и может воспроизводить символы в
нескольких режимах. В каждом из режимов допускается конструирование символов с
помощью матриц различной ширины и высоты (таблица 2). Минимальная ширина
символов - 5.
Таблица 2 - Таблица соответствия размеров матриц режимам
принтера
Режим
|
Ширина
|
Высота
|
Draft
|
9
|
24
|
LQ
pica
|
29
|
24
|
LO
elite
|
23
|
24
|
LQ
semi-. condensed
|
15
|
24
|
LQ
proportional
|
37
|
24
|
Draft
super subscript
|
7
|
16
|
LQ
super subscript
|
23
|
16
|
LQ
prop, super subscript
|
23
|
16
|
□
|
Номера иголок
|
|
* * * * * * * *
* *
|
1
|
* * * * * *
|
* * * * * * * *
* *
|
2
|
* * * * * * *
|
* * * * * * * *
* *
|
3
|
* * * *
|
* * * * * * * *
* *
|
4
|
* * * *
|
* * * * * * * *
* *
|
5
|
* * * *
|
* * * * * * * *
* *
|
6
|
* * * * * * *
* *
|
* * * * * * * *
* *
|
7
|
* * * *
|
* * * * * * * *
* *
|
8
|
* * * *
|
* * * * * * * *
* *
|
9
|
* * * *
|
1 2 3 4 5 6 7 8
9 10
|
|
1 2 3 4 5 6 7 8
9 10
|
Номера позиций
|
|
Номера позиции
|
Рисунок 2 - Пример формирования матрицы для
печати символа "А"
Символ представляет собой матрицу, в которой темные ячейки
соответствуют выпячиваемым иголкам, а светлые - утапливаемым. Такая матрица
может быть закодирована. Каждой строке матрицы присвоен номер. Все строки
матрицы разбиты на три группы, внутри каждой из которых нумерация повторяется.
Каждый столбец матрицы кодируется тремя байтами, соответствующими одной из
групп строк. Значение каждого из трех байтов, кодирующих столбец, определяется
суммой, присвоенной строкам, на пересечении которых с данным столбцом размещен
знак"*" (рисунок 2).
Кроме кодированного описания внешнего вида символа,
необходимо задать три параметра, определяющих ширину символа и его положение
относительно других символов при печати. Каждый из этих параметров предшествует
описанию внешнего вида символа и задается байтом информации. Первый параметр (m0) определяет расстояние
слева, второй параметр (ml) - ширину самого символа, третий параметр (m2) - расстояние справа от
других символов.
При описании символа количество колонок (ml), образующих символ, и
общее пространство (m0+ml+m2).
занимаемое символом, не должны превышать значений, представленных в таблице 3.
Таблица 3 - Таблица соответствия значения количества колонок
и общего пространства режимам принтера
Режим
|
ml
|
m0+ml+m2
|
Draft
|
9
|
12
|
LQ
pica
|
29
|
36
|
LO
elite
|
23
|
30
|
LQ
semi-. condensed
|
15
|
24
|
LQ
proportional
|
37
|
42
|
Draft
super subscript
|
7
|
12
|
LQ
super subscript
|
23
|
36
|
LQ
prop, super subscript
|
23
|
42
|
В соответствии с условием поставленной задачи рассматриваемым
режимом матричного принтера является Draft super subscript, следовательно, матрица
имеет размеры в ширину 7 позиций и в высоту 16 иголок. Ширину отступов от
символа слева (m0) и справа (m2) выберем равными одной иголке, общее пространство символа m0+ml+m2=1+7+1=9, что не
превышает максимального значения 12.
Чтобы связать описание символа с соответствующим кодом,
необходимо послать на принтер набор команд, указывающих режим, номер кода
загружаемого символа, три байта общего описания символа (m0, ml, m2) и байты описания
столбцов матрицы. Данные операции прослеживаются на примере листингов
приложений.
Заданием на курсовую работу было проектирование своих
инициалов (Борычев Алексей Сергеевич) - т.е. Б, А, С.
Проектирование символа "Б"
1. На клеточном поле 15х24 изображается кривая
проектируемого символа, затем на ее основе проектируется матрица (Рисунок 3)
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
128
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рисунок 1. - Матрица символа "Б"
. Каждый столбец матрицы кодируется тремя байтами (таблица
4).
Таблица 1 - Значение кодирующих байтов матрицы для символа
"Б"
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
байт 1
|
0
|
127
|
64
|
64
|
64
|
64
|
64
|
64
|
64
|
64
|
64
|
64
|
64
|
64
|
0
|
байт 2
|
0
|
255
|
4
|
4
|
4
|
4
|
4
|
4
|
4
|
4
|
4
|
4
|
4
|
7
|
0
|
байт 3
|
0
|
254
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
254
|
0
|
. Затем в оперативную память принтера передается данные,
связанные с кодом литеры, и подается команда печати спроектированного символа
(Приложение 1).
Проектирование символов "А", "С" осуществляется
аналогично.
Проектирование символа "А"
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
128
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рисунок 2 - Матрица символа "А"
Таблица 2 - Значение кодирующих байтов матрицы для символа
"А"
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
11
|
12
|
13
|
14
|
15
|
байт 1
|
0
|
0
|
31
|
48
|
32
|
32
|
96
|
96
|
96
|
96
|
32
|
48
|
31
|
0
|
0
|
байт 2
|
0
|
0
|
255
|
8
|
8
|
8
|
8
|
8
|
8
|
8
|
8
|
8
|
255
|
0
|
0
|
байт 3
|
0
|
0
|
254
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
254
|
0
|
0
|
Листинг второго этапа проектирования приведен в приложении 2.
Проектирование символа "С"
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
128
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 3 - Значение кодирующих байтов матрицы для символа
"С"
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
байт 1
|
0
|
127
|
64
|
64
|
64
|
64
|
64
|
64
|
64
|
64
|
64
|
64
|
64
|
64
|
0
|
байт 2
|
0
|
255
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
байт 3
|
0
|
254
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
0
|
Листинг третьего этапа проектирования приведен в приложении
3.
Заключение
В ходе работы над теоретической частью курсовой работы была
изучена соответствующая литература по безопасности и функционированию
операционных систем. Особое внимание было уделено функциям подсистемы защиты
ОС.
Выполнение аналитической части курсовой работы позволило
углубить знания в области управления печатающими устройствами. Подробно были
изучены принципы работы матричного принтера, механизм печати отдельных литер,
управляющие команды, позволяющие осуществить вывод символов на печать. Получены
практические навыки расширения диапазона используемых для печати символов путем
конструирования недостающих знаков, кодирования их описания и подачи на принтер
набора управляющих команд. Написание программы на языке BASIC позволило повысить не
только уровень владения конкретно этим языком, но и программированием в целом.
Была так же выполнена поставленная задача - формирование
новых символов, разработка команд для их загрузки в оперативную память принтера
и программы, реализующей вывод данных символов на печать - выполнена путем
разработки начертания символов, составляющих мою фамилию (НАУМЕНКО), и
реализации необходимых программных кодов на языке BASIC.
Список
используемой литературы
1. Гайчук
Д.В., Подопригора Н.Б. Методические указания к выполнению курсовой работы по
дисциплине "Безопасность операционных систем"для студентов
специальности 090105 "Комплексное обеспечение информационной безопасности
автоматизированных систем", Ставрополь 2006-05-15
2. Гордеев А.В. Операционные системы: Учебник для вузов. - 2-е изд. -
СПб.: Питер
<http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%82%D0%B5%D1%80_(%D0%B8%D0%B7%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE)>,
2007. - 416 с. - ISBN 978-5-94723-632-3
<http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:BookSources/9785947236323>
3. Деннинг П. Дж.,
Браун Р.Л. Операционные системы //
Современный компьютер. - М.: 1986.
4. Иртегов Д.В. Введение в операционные системы. - 2-е изд. - СПб.:
BHV-СПб, 2007. - ISBN 978-5-94157-695-1
<http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:BookSources/9785941576951>
. Керниган Б.У.
<http://ru.wikipedia.org/wiki/%D0%9A%D0%B5%D1%80%D0%BD%D0%B8%D0%B3%D0%B0%D0%BD,_%D0%91%D1%80%D0%B0%D0%B9%D0%B0%D0%BD_%D0%A3%D0%B8%D0%BB%D1%81%D0%BE%D0%BD>,
Пайк Р.У.
<http://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D0%B9%D0%BA,_%D0%A0%D0%BE%D0%B1>
UNIX - универсальная среда программирования = The UNIX Programming Environment.
- М.: 1992. (классическое введение в открытые ОС, по большей части сохранившее
актуальность)
6. Олифер В.Г.,
Олифер Н.А. Сетевые операционные
системы. - СПб.: Питер <http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%82%D0%B5%D1%80_(%D0%B8%D0%B7%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE)>,
2002. - 544 с. - ISBN 5-272-00120-6
<http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:BookSources/5272001206>
7. Столлингс У. Операционные системы = Operating Systems: Internals and Design
Principles. - М.: Вильямс
<http://ru.wikipedia.org/w/index.php?title=%D0%92%D0%B8%D0%BB%D1%8C%D1%8F%D0%BC%D1%81_(%D0%B8%D0%B7%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE)&action=edit&redlink=1>, 2004. - 848 с. -
ISBN 0-1303-1999-6
<http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:BookSources/0130319996>
8. Таненбаум Э.С.
<http://ru.wikipedia.org/wiki/%D0%A2%D0%B0%D0%BD%D0%B5%D0%BD%D0%B1%D0%B0%D1%83%D0%BC,_%D0%AD%D0%BD%D0%B4%D1%80%D1%8E_%D0%A1%D1%82%D1%8E%D0%B0%D1%80%D1%82> Многоуровневая организация ЭВМ = Structured Computer Organization. - М.: Мир,
1979. - 547 с.
9. Таненбаум Э.С.
<http://ru.wikipedia.org/wiki/%D0%A2%D0%B0%D0%BD%D0%B5%D0%BD%D0%B1%D0%B0%D1%83%D0%BC,_%D0%AD%D0%BD%D0%B4%D1%80%D1%8E_%D0%A1%D1%82%D1%8E%D0%B0%D1%80%D1%82>
Современные операционные системы = Modern Operating Systems. - 2-е изд. - СПб.:
Питер <http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%82%D0%B5%D1%80_(%D0%B8%D0%B7%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE)>,
2005. - 1038 с. - ISBN 5-318-00299-4
<http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:BookSources/5318002994>
. Таненбаум Э.С.
<http://ru.wikipedia.org/wiki/%D0%A2%D0%B0%D0%BD%D0%B5%D0%BD%D0%B1%D0%B0%D1%83%D0%BC,_%D0%AD%D0%BD%D0%B4%D1%80%D1%8E_%D0%A1%D1%82%D1%8E%D0%B0%D1%80%D1%82>,
Вудхалл А.С. Операционные системы. Разработка и реализация = Operating Systems: Design and
Implementation. - 3-е изд. - СПб.: Питер
<http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%82%D0%B5%D1%80_(%D0%B8%D0%B7%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE)>, 2007. - 704 с. -
ISBN 978-5-469-01403-4
<http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:BookSources/9785469014034>
11. Шоу А. Логическое проектирование операционных систем = The
Logical Design of Operating Systems. - М.: Мир, 1981. - 360 с.
. Рэймонд Э.С.
<http://ru.wikipedia.org/wiki/%D0%A0%D1%8D%D0%B9%D0%BC%D0%BE%D0%BD%D0%B4,_%D0%AD%D1%80%D0%B8%D0%BA_%D0%A1%D1%82%D0%B8%D0%B2%D0%B5%D0%BD>
Искусство программирования для UNIX = The Art of UNIX Programming. - М.:
Вильямс
<http://ru.wikipedia.org/w/index.php?title=%D0%92%D0%B8%D0%BB%D1%8C%D1%8F%D0%BC%D1%81_(%D0%B8%D0%B7%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE)&action=edit&redlink=1>,
2005. - 544 с. - ISBN 5-8459-0791-8
<http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:BookSources/5845907918>
13. Mark G.
Sobell. UNIX System V. A
Practical Guide. - 3rd ed. - 1995.
Приложения
Приложение 1
Листинг вывода на печать символа "Б" на языке QBASIC
1000 LPRINTCHR$ (27); "xl";
LPRINT CHR$ (27); "&"; CHR$ (0);
CHR$ (31); CHRS (31);
RESTORE 1540
FORN=31 TO 31
READ LS: LPRTNT CHR$ (LS);
READ CW: LPRTNT CHR$ (CW);
READ RS: LPRTNT CHR$ (RS);
FOR M=l TOCW*3
READ MM
LPRINT CHR$ (MM);
NEXT M
NEXTN
'Symbol'
DATA 2,15,2
DATA 0,0,0, 127,255,254, 64,4,2, 64,4,2, 64,4,2
DATA 64,4,2, 64,4,2, 64,4,2, 64,4,2, 64,4,2
DATA 64,4,2, 64,4,2, 64,4,2, 64,7,254,
0,0,0
Приложение 2
Листинг вывода на печать символа "А" на языке QBASIC
1000 LPRINTCHR$ (27); "xl";
LPRINT CHR$ (27); "&"; CHR$ (0);
CHR$ (31); CHRS (31);
RESTORE 1540
FORN=31 TO 31
READ LS: LPRTNT CHR$ (LS);
READ CW: LPRTNT CHR$ (CW);
READ RS: LPRTNT CHR$ (RS);
FOR M=l TOCW*3
READ MM
LPRINT CHR$ (MM);
NEXT M
NEXTN
'Symbol'
DATA 1,15,1
DATA 0,0,0, 0,0,0, 31,255,254, 48,8,0, 32,8,0
DATA 32,8,0, 96,8,0, 96,8,0, 96,8,0, 96,8,0
DATA 32,8,0, 48,8,0, 31,255,254, 0,0,0, 0,0,0
Приложение 3
Листинг вывода на печать символа "С" на языке QBASIC
1000 LPRINTCHR$ (27); "xl";
LPRINT CHR$ (27); "&"; CHR$ (0);
CHR$ (31); CHRS (31);
RESTORE 1540
FORN=31 TO 31
READ LS: LPRTNT CHR$ (LS);
READ CW: LPRTNT CHR$ (CW);
READ RS: LPRTNT CHR$ (RS);
FOR M=l TOCW*3
READ MM
LPRINT CHR$ (MM);
NEXT M
NEXTN
'Symbol'
DATA 2,15,2
1560 DATA 0,0,0, 127,255,254, 64,0,2, 64,0,2,
64,0,2
DATA 64,0,2, 64,0,2, 64,0,2, 64,0,2, 64,0,2
DATA 64,0,2, 64,0,2, 64,0,2, 64,0,2, 0,0,0