Реализация безопасности в UNIX
Когда пользователь входит в систему, программа регистрации login (которая является SETUID root) запрашивает у пользователя его имя и пароль. Затем она хэширует пароль и ищет его в файле паролей /etc/passwd, чтобы определить, соответствует ли хэш-код содержащимся в нем значениям. Хэширование применяется, чтобы избежать хранения пароля в незашифрованном виде где-либо в системе. Если пароль введен верно, программа регистрации считывает из файла /etc/passwd имя программы оболочки, которую предпочитает пользователь. Ей может быть программа sh, но это также может быть и другая оболочка, например csh или ksh. Затем программа регистрации использует системные вызовы setuld и setgid, чтобы установить для себя UID и GID. После этого программа регистрации открывает клавиатуру для стандартного ввода (файл с дескриптором 0) и экран для стандартного вывода (файл с дескриптором 1), а также экран для вывода стандартного потока сообщений об ошибках (файл с дескриптором 2). Наконец, она выполняет оболочку, которую указал пользователь, таким образом, завершая свою работу.
С этого момента начинает работу оболочка с установленными UID и GID, а также стандартными потоками ввода, вывода и ошибок, настроенными на устройства ввода-вывода по умолчанию. Все процессы, которые она запускает при помощи системного вызова fork (то есть команды, вводимые пользователем с клавиатуры), автоматически наследуют UID и GID оболочки, поэтому у них будет верное значение владельца и группы. Все файлы, создаваемые этими процессами, также будут иметь эти значения.
Когда любой процесс пытается открыть файл, система сначала проверяет биты защиты в i-узле файла для заданных значений рабочих UID и GID, чтобы определить, разрешен ли доступ для данного процесса. Если доступ разрешен, файл открывается и процессу возвращается дескриптор файла. В противном случае файл не открывается, а процессу возвращается значение –1. При последующих обращениях к системным вызовам read и write проверка не выполняется. В результате, если режим защиты файла изменяется уже после того, как файл открыт, новый режим не повлияет на процессы, которые уже успели открыть этот файл.
В операционной системе Linux защита файлов и ресурсов осуществляется так же, как и в UNIX.
Резюме
Операционная система UNIX широко используется на вычислительных машинах различных классов от ноутбуков до суперкомпьютеров. В операционной системе UNIX есть три интерфейса: оболочка, библиотека языка С и сами системные вызовы. Оболочка позволяет пользователям вводить команды и исполнять их. Это могут быть простые команды, конвейеры или более сложные структуры. Ввод и вывод могут перенаправляться. В библиотеке С содержатся системные вызовы, а также множество расширенных вызовов. Каждый из системных вызовов выполняет определенные необходимые функции.
К ключевым понятиям операционной системы UNIX относятся процесс, модель памяти, ввод-вывод и файловая система. Процессы могут создавать дочерние процессы, в результате чего формируются деревья процессов. Для управления процессами в UNIX используются две ключевые структуры данных: таблица процессов и структура пользователя. Таблица процессов постоянно находится в памяти, а структура пользователя может выгружаться на диск. При создании процесса дублируется запись в таблице процессов, а также образ памяти процесса. Для планирования применяется алгоритм, основанный на приоритетах, отдающий предпочтение интерактивным процессам.
Модель памяти состоит из трех сегментов для каждого процесса: для текста (исполняемого кода), данных и стека. Изначально для управления памятью использовался свопинг, но в большинстве современных версий системы UNIX для этого применяется страничная подкачка. Состояние каждой страницы отслеживается в карте памяти, а страничный демон поддерживает достаточное количество свободных страниц при помощи алгоритма часов.
Доступ к устройствам ввода-вывода осуществляется при помощи специальных файлов, у каждого из которых есть старший номер устройства и младший номер устройства. Для снижения числа обращений к диску в блочных устройствах ввода-вывода применяется буферный кэш. Для управления кэшем используется алгоритм LRU (Least-Recently-Used – «наиболее давнего использования»). Символьный ввод-вывод может осуществляться в обработанном и необработанном режимах. Для дополнительных возможностей символьного ввода-вывода применяются дисциплины линии связи или потоки.
Файловая система в UNIX – иерархическая, с файлами и каталогами. Все диски монтируются в единое дерево каталогов, начинающееся в одном корне. Отдельные файлы могут быть связаны с любым каталогом дерева. Чтобы пользоваться файлом, его нужно сначала открыть. При этом процессу, открывающему файл, возвращается дескриптор файла, который затем используется при чтении этого файла и записи в файл. Внутри файловая система использует три основные таблицы: таблицу дескрипторов файлов, таблицу дескрипторов открытых файлов и таблицу i-узлов. Из этих таблиц таблица i-узлов является наиболее важной. В ней содержится информация, необходимая для управления файлом и позволяющая найти его блоки.
Защита файлов основывается на регулировании доступа для чтения, записи и исполнения, предоставляемого владельцу файла, членам его группы и всем остальным пользователям. Для каталогов бит исполнения интерпретируется как разрешение поиска в каталоге.
Контрольные вопросы и задания
1. Опишите интерфейсы ОС UNIX.
2. Каковы особенности оболочки и утилит системы UNIX?
3. Дайте определение программы, называемой фильтром.
4. Как называются файлы, содержащие команды оболочки?
5. В чем заключается идея стандартизации обслуживающих программ UNIX?
6. Представьте состав нижнего уровня ядра UNIX.
7. Какие функции выполняет уровень системы виртуальной памяти UNIX?
8. Назовите главные функции уровня интерфейсов системы UNIX.
9. Какие функции выполняют в UNIX фоновые процессы, называемые демонами?
10. Опишите механизмы взаимодействия и синхронизации процессов в UNIX.
11. Какие структуры данных, относящиеся к процессам, поддерживает ядро системы UNIX?
12. Перечислите категории информации, хранящейся в таблице процессов.
13. Какие данные составляют структуру пользователя?
14. Опишите этапы создания процесса в системе UNIX.
15. Охарактеризуйте методы планирования в ОС семейства UNIX .
16. Из каких сегментов состоит адресное пространство в UNIX?
17. В чем заключается свойство отображения файлов на адресное пространство памяти?
18. Опишите способы реализации управления памятью в UNIX .
19. Как работает механизм страничной подкачки в UNIX?
20. Поясните структуру карты памяти и реализацию алгоритма замещения страниц.
21. Опишите реализацию ввода-вывода в ОС UNIX .
22. Дайте определение понятию «сокет» и перечислите наиболее распространенные типы сокетов.
23. Охарактеризуйте решения, применяемые в UNIX для структурирования драйверов символьных устройств и придания им свойства модульности.
24. Какие типы файлов поддерживаются в ОС UNIX?
25.Как реализована классическая файловая система UNIX.
26. В чем заключаютсяособенности реализация файловой системы Berkeley Fast?
27. Представьте реализацию файловых систем Linux.
28. Охарактеризуйте файловую систему NFS.
29. Каким образом реализуется свойство автомонтировки файловых систем в UNIX?
30. К каким проблемам приводит использование кэширования данных
в файловой системе NFS?
31. Опишите функционирование системы безопасности в UNIX.
Пример практической реализации