Файл: Учебнометодическое пособие Томск 2016 2 удк 004. 451(075. 8) Ббк 32. 973. 2018. 2я73 к 754 Рецензенты.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.10.2023
Просмотров: 297
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Псевдотерминал – программный модуль ОС, предназначен-
ный для передачи информации между двумя процессами, а также для
некоторого преобразования этой информации. Это преобразование
нужно для того, чтобы один из процессов, соединяемых псевдотер-
миналом, выполнялся бы так, как будто он взаимодействует
с настоящим терминалом.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
В нашем случае таким «обманываемым» процессом является login. Пе- ред его созданием процесс-отец rlogin (сервер) производит перенаправление стандартных ввода и вывода на псевдотерминал. Такое перенаправление вы- полняется очень просто: достаточно открыть псевдоустройство на ввод под программным именем 0, а на вывод – под именем 1. Так как login является дочерним процессом rlogin (сервер), то он наследует эти имена псевдо- устройства и будет пользоваться ими так, как будто речь идет о настоящем терминале.
После того как login начнет выполняться, он будет действовать как обычно, то есть проверит имя и пароль пользователя, а затем загрузит вместо себя shell. При этом весь вывод login(а потом shell) будет поступать в псевдотерминал, из него в rlogin (сервер), а затем по сети в rlogin (клиент).
Вводlogin выполняется по этому же пути, но в обратную сторону. Так как все потомки процесса shellнаследуют открытые для него файлы (и устрой- ства), то, запущенные в оперативном режиме, они пользуются псевдотермина- лом аналогично shell.
Поясним теперь, как псевдотерминал выполняет функции настоящего терминала. Допустим, что удаленный пользователь захотел оказать воздействие на свои процессы, выполняемые под управлением UNIX. Для этого он нажима- ет одну из комбинаций клавиш, рассмотренных в пп. 3.4.2. Получив от rlogin
(сервер) код этой комбинации, псевдотерминал распознает ее и выдает тот сиг- нал, который соответствует этой комбинации клавиш. Таким образом, удален-
120 ный терминал действует на UNIX-систему точно так же, как и локальный тер- минал.
После того как пользователь вошел в систему, ОС должна обеспечивать защиту результатов его работы от воздействия других пользователей. Так как эти результаты есть информация, то речь идет о защите информационных ре- сурсов пользователя. При этом защита информации в ОП выполняется аппа- ратными и программными средствами поддержки мультипрограммирования.
Что касается защиты информации на устройствах ВП, то эта важнейшая функ- ция поддержки многопользовательской работы выполняется исключительно самой ОС.
4.2 Защита файлов
Каждый пользователь, зарегистрированный в системе, имеет в ней «ин- формационный след» – совокупность информации, связанной с данным пользо- вателем. Этот информационный след схематично показан на рисунке 4.2. На этом рисунке пунктиром показана краткосрочная информация, связанная с выполнением процессов. Долгосрочная информация хранится на устройствах
ВП в виде файлов.
Рис. 4.2 Информационный след пользователя в системе
121
ОС имеет дело не с самими процессами и файлами, а с их блоками управ- ления. Структура этих дескрипторов будет рассмотрена нами в других разде- лах, а пока лишь заметим, что, кроме прочей информации, они обязательно со- держат имя пользователя-владельца, а каждый дескриптор файла содержит еще и имя пользователя-группы. Логика появления этих имен в дескрипторах сле- дующая. Во-первых, дескриптор корня дерева процессов (процесса shell) по- лучает имя пользователя сразу же после завершения входа пользователя в си- стему. Все порожденные им процессы наследуют это имя и передают его своим дочерним процессам. Каждый файл получает имя пользователя-владельца от процесса, создавшего этот файл. Кроме того, при создании файла из его записи
/etc/passwd
, соответствующей пользователю, переписывается имя его пер- вичной группы.
Пользователь-владелец и пользователь-группа могут быть изменены с помощью команд shell – chownи chgrp. В качестве первого параметра этих команд записываются, соответственно, символьное имя нового пользова- теля или имя новой группы. В качестве других параметров записываются имена тех файлов, для которых производится замена. В некоторых UNIX-системах командыchownи chgrpмогут выдаваться прежним владельцем файла, а в других – только суперпользователем.
При создании файла в его дескриптор записываются не только имя поль- зователя-владельца и его первичной группы, но и права доступа к файлу трех разновидностей его пользователей: 1) пользователь-владелец; 2) пользова- тель-группа; 3) остальные пользователи системы.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Правами доступа к файлу называются формы доступа
к файлу, разрешенные для этого пользователя.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Суперпользователь всегда имеет неограниченные права доступа. Права доступа остальных пользователей могут быть ограничены.
Различают основные и дополнительные формы доступа. Перечислим ос- новные формы доступа к файлу:
1) чтение файла – r;
2) записьв файл – w;
3) выполнениефайла – x. Выполнение файла означает, что этот файл яв- ляется исполняемым файлом программы и может быть выполнен по-
122 сле загрузки в ОП как машинная программа или же файл является ко- мандным (скриптом).
Например, суперпользователь имеет по отношению к любому файлу не- ограниченные права доступа – rwx.
Применительно к каталогу перечисленные формы доступа имеют особен- ный смысл. Операция «чтение каталога» означает получение перечня имен файлов, записанных в данном каталоге. Получения никакой другой информа- ции о файлах эта форма доступа не предполагает. Например, форма доступа r достаточна для того, чтобы выполнить команду shell – ls без флагов, но не достаточна для выполнения этой же команды с флагом -l, так как наличие это- го флага предполагает использование информации, хранящейся не в каталоге, а в блоках управления файлами.
Для получения дополнительной информации о дочерних файлах каталога необходимо иметь к нему форму доступа x (выполнение). Эта же форма необ- ходима для того, чтобы сделать каталог текущим (с помощью команды cd). Бо- лее того, чтобы сделать каталог текущим, необходимо иметь форму доступа x ко всем каталогам в имени-пути данного каталога. Иначе в данный каталог мы не попадем.
Очевидно, что для создания файла (в том числе и каталога) мы должны иметь форму доступа w (запись) к родительскому каталогу. Эта же форма до- ступа требуется и при удалении файла. Может показаться странным, но для удаления файла какие-то формы доступа к нему самому не требуются. При этом, если форма доступа w кфайлу есть, команда удаления файла rm не выда- ет на экран дополнительного запроса подтвердить удаление файла. Иначе – та- кой запрос выдается. Применительно к каталогу сочетание прав r и x позволяет получить интересный эффект, называемый «темным каталогом». Он заключа- ется в том, что для всех пользователей, кроме владельца, запрещено чтение ка- талога, но разрешено его выполнение. Поэтому только «посвященные» пользо- ватели, знающие о наличии файла в каталоге, имеют возможность работать с ним.
Для того чтобы узнать права доступа к файлам текущего каталога, вос- пользуемся командой ls с флагом -l.
123
· · · · · · · · · · · · · · · · · · · · · · · · · ·
Пример
· · · · · · · · · · · · · · · · · · · · · · · ·
$ ls -l
$ - rw-r-
- r- -
1 vlad gro 1120 Dec15 15:03 abc.txt d rwxr–
xr- -
2 vlad gro 11500 Aug28 17:38 mac
$
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Информация о файле, выданная UNIX, состоит из 8 колонок. В первой позиции первой колонки записан тип файла (d – каталог; «-» – прочий файл).
В остальных девяти позициях первой колонки записаны права доступа к файлу: первые три символа – права доступа пользователя-владельца; вторые три сим- вола – права доступа пользователя-группы; последние три символа – права до- ступа прочих пользователей [6].
В приведенном примере для первого файла владелец имеет права доступа rw (понятно, что «выполнять» текстовый файл бессмысленно), а все остальные пользователи, включая и членов группы, могут только читать информацию из файла. Что касается второго файла (это каталог), то его владелец обладает все- ми правами доступа; член группы – всеми правами, за исключением записи, а остальные пользователи могут только читать файл.
Что касается остальных колонок информации о файлах, то в них содер- жится:
1) число жестких связей – количество каталогов, в которых «зарегистри- рован» данный файл;
2) имя пользователя-владельца файла;
3) имя пользователя-группы;
4) длина файла в байтах;
5) дата последнего изменения файла;
6) время последнего изменения;
7) имя файла.
Владелец файла может не только вывести права доступа на экран, но и внести в них изменения. Для этого используется команда shell – chmod.
Ее общий формат:
| u | | + | | r |
124 chmod
| g | | – | | w | <имя файла> [<имя файла…>],
| o | | = | | x |
| a | где «u» – владелец; «g» – группа; «o» – остальные пользователи; «a» – все пользователи; «+» – добавить; «–» – удалить; «=» – присвоить.
· · · · · · · · · · · · · · · · · · · · · · · · · ·
Пример
· · · · · · · · · · · · · · · · · · · · · · · ·
Следующая команда лишает членов пользователя-группы файла abcfile права на запись и выполнение этого файла: chmod g-wx abcfile
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Проверка прав доступа к файлу выполняется в момент открытия файла программой процесса. Если пользователь – владелец процесса одновременно является и владельцем файла, то принадлежность пользователя к группе не проверяется. Если пользователь процесса не является владельцем файла, то проверяется его принадлежность к пользователю-группе. В случае принадлеж- ности к группе пользователь процесса наделяется правами группы, иначе – пра- вами доступа к файлу для остальных пользователей [7].
Кроме основных форм доступа (и соответствующих прав) к файлам, су- ществуют дополнительные формы доступа, каждая из которых может рассмат- риваться как модификатор формы доступа x (выполнение):
1) s (для пользователя – владельца файла) – динамически задать имя пользователя процесса таким, каково оно у владельца файла. Данная форма доступа, как и следующая, имеет смысл только для выполни- мых файлов. Такая форма доступа, например, позволяет пользователю производить замену своего пароля, запуская утилиту passwd. Вла- дельцем исполняемого файла этой утилиты является суперпользова- тель, который одновременно является и владельцем файла паролей.
Так как этот исполняемый файл предоставляет своему владельцу (су- перпользователю) права доступа r, x и s,а всем остальным пользова- телям права доступа r и x, то при его запуске процесс пользователя получает временно в качестве имени владельца имя суперпользовате- ля и поэтому может выполнять запись в файл паролей. Естественно, что программа passwd написана так, что пользователь может заме- нить только свой пароль, не влияя на пароли других пользователей;
125 2) s (для пользователя – группы файла) – динамически задать имя поль- зователя-группы процесса таким, каково оно у пользователя-группы файла. Данная форма доступа похожа на предыдущую, но использует- ся реже ее;
3) t– в настоящее время используется только для каталогов, разрешая пользователю удалять только те файлы, для которых он является вла- дельцем, или в которых ему разрешена запись. Например, такая форма доступа назначается каталогу /tmp, предназначенному для хранения временных файлов всех пользователей. Имея форму доступа w (за- пись) к этому каталогу, пользователь, тем не менее, не может удалить файлы других пользователей.
Для просмотра дополнительных прав доступа по-прежнему используется команда ls с флагом -l. При наличии дополнительного права доступа для ка- кого-то пользователя (владелец, группа или остальные пользователи) вместо права x, которое в этом случае обязательно, записывается его модификатор s или t.
После того как мы рассмотрели основные методы поддержки мультипро- граммирования и многопользовательской работы, перейдем к рассмотрению укрупненной структуры ОС.
4.3 Укрупненная структура операционной системы
На рисунке 4.3 приведена укрупненная структура операционной системы
UNIX. Основная часть ОС, выполняемая в привилегированном режиме ЦП, называется ядром. Подсистемы ядра выполняют управление основными объек- тами ВС: процессами, файлами, периферийными устройствами, центральным процессором и оперативной памятью. Часть программ ОС реализована вне яд- ра. Сюда относятся интерпретаторы команд ОС (shell), а также системные демоны (init, getty, rlogin и т. д.).
Напомним, что shell, как и другие обрабатывающие системные и при- кладные процессы, имеет управляющий терминал, позволяющий пользователю влиять на выполнение своих программ. Демоны, наоборот, не имеют управля- ющего терминала, что позволяет им жить «вечно» (до перезагрузки системы).
Все обрабатывающие процессы, а также демоны пользуются услугами ядра, используя для обращения к нему системные вызовы. По своей форме каждый системный вызов представляет собой машинную команду передачи
126 управления – call, int или jmp. В однопрограммной системе (например, в MS-DOS) все системные вызовы выполняются командой int (команда пре- рывания). В мультипрограммных системах роль этой команды скрыта от при- кладных программ благодаря интерфейсу системных вызовов.
Рис. 4.3 Укрупненная структура ОС
Интерфейс системных вызовов содержит процедуры, доступные для вы- зова программами, расположенными вне ядра, а также подпрограммы, распо- ложенные внутри ядра и недоступные для такого вызова. Первые процедуры принято называть «заглушками», и обычно эти процедуры объединены в DLL.
Для вызова «заглушки» прикладная программа использует обычную команду
127 call (вызов процедуры). После того как требуемая «заглушка» вызвана, она сама переключает ЦП в привилегированный режим, используя команду int или jmp, и одновременно запускает скрытую подпрограмму ядра, выполняю- щую координационные функции. Суть этих функций сводится к тому, что в со- ответствии с принятыми параметрами вызова (как и любая другая, процедура
«заглушка» получает параметры) определяется последовательность внутренних процедур ядра, подлежащих исполнению.
После того как последовательность внутренних процедур ядра завершена,
«заглушка», возможно, возвратит управление в прикладную программу. Такой возврат выполняется в том случае, если выполняемый системный вызов являет- ся синхронным. При асинхронном системном вызове прикладная программа не должна ждать завершения запрошенной работы ядра, и поэтому сразу же после запуска скрытой подпрограммы ядра «заглушка» возвращает управление в вы- звавшую ее программу.
Обратим внимание, что функции подсистемы ввода/вывода, а также функции управления аппаратурой не доступны для непосредственного исполь- зования в прикладных программах. Это принципиально отличает мультипро- граммную систему от однопрограммной, в которой все эти функции доступны в любой программе.
Рассмотренная укрупненная схема присуща не только UNIX, но, с неко- торыми отличиями, и другим мультипрограммным системам. Основное разли- чие здесь заключается в распределении функций между ядром и внешними процессами. В другой модели операционных систем, называемой моделью
«клиент-сервер», значительная часть функций ядра передается внешним про- цессам, то есть демонам. Теперь эти демоны становятся серверами, предназна- ченными для обслуживания прикладных процессов (клиентов). Для получения системного обслуживания процесс-клиент посылает сообщение серверу, ис- пользуя ядро как «почту». После того как требуемая системная функция вы- полнена, сервер посылает ответное сообщение, также пользуясь «почтовыми» услугами ядра. При использовании данной модели ядро выполняет лишь наиболее часто используемые функции, к которым относятся, например, пере- дача сообщений между процессами или обработка прерываний. Такое ядро принято называть микроядром. Заметим, что реализация данной модели ОС возможна без изменения программного интерфейса системных вызовов. Для этого достаточно поручить посылку сообщения для сервера ранее упомянутой процедуре-«заглушке». Эта же процедура может выполнять прием ответных
ный для передачи информации между двумя процессами, а также для
некоторого преобразования этой информации. Это преобразование
нужно для того, чтобы один из процессов, соединяемых псевдотер-
миналом, выполнялся бы так, как будто он взаимодействует
с настоящим терминалом.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
В нашем случае таким «обманываемым» процессом является login. Пе- ред его созданием процесс-отец rlogin (сервер) производит перенаправление стандартных ввода и вывода на псевдотерминал. Такое перенаправление вы- полняется очень просто: достаточно открыть псевдоустройство на ввод под программным именем 0, а на вывод – под именем 1. Так как login является дочерним процессом rlogin (сервер), то он наследует эти имена псевдо- устройства и будет пользоваться ими так, как будто речь идет о настоящем терминале.
После того как login начнет выполняться, он будет действовать как обычно, то есть проверит имя и пароль пользователя, а затем загрузит вместо себя shell. При этом весь вывод login(а потом shell) будет поступать в псевдотерминал, из него в rlogin (сервер), а затем по сети в rlogin (клиент).
Вводlogin выполняется по этому же пути, но в обратную сторону. Так как все потомки процесса shellнаследуют открытые для него файлы (и устрой- ства), то, запущенные в оперативном режиме, они пользуются псевдотермина- лом аналогично shell.
Поясним теперь, как псевдотерминал выполняет функции настоящего терминала. Допустим, что удаленный пользователь захотел оказать воздействие на свои процессы, выполняемые под управлением UNIX. Для этого он нажима- ет одну из комбинаций клавиш, рассмотренных в пп. 3.4.2. Получив от rlogin
(сервер) код этой комбинации, псевдотерминал распознает ее и выдает тот сиг- нал, который соответствует этой комбинации клавиш. Таким образом, удален-
120 ный терминал действует на UNIX-систему точно так же, как и локальный тер- минал.
После того как пользователь вошел в систему, ОС должна обеспечивать защиту результатов его работы от воздействия других пользователей. Так как эти результаты есть информация, то речь идет о защите информационных ре- сурсов пользователя. При этом защита информации в ОП выполняется аппа- ратными и программными средствами поддержки мультипрограммирования.
Что касается защиты информации на устройствах ВП, то эта важнейшая функ- ция поддержки многопользовательской работы выполняется исключительно самой ОС.
4.2 Защита файлов
Каждый пользователь, зарегистрированный в системе, имеет в ней «ин- формационный след» – совокупность информации, связанной с данным пользо- вателем. Этот информационный след схематично показан на рисунке 4.2. На этом рисунке пунктиром показана краткосрочная информация, связанная с выполнением процессов. Долгосрочная информация хранится на устройствах
ВП в виде файлов.
Рис. 4.2 Информационный след пользователя в системе
121
ОС имеет дело не с самими процессами и файлами, а с их блоками управ- ления. Структура этих дескрипторов будет рассмотрена нами в других разде- лах, а пока лишь заметим, что, кроме прочей информации, они обязательно со- держат имя пользователя-владельца, а каждый дескриптор файла содержит еще и имя пользователя-группы. Логика появления этих имен в дескрипторах сле- дующая. Во-первых, дескриптор корня дерева процессов (процесса shell) по- лучает имя пользователя сразу же после завершения входа пользователя в си- стему. Все порожденные им процессы наследуют это имя и передают его своим дочерним процессам. Каждый файл получает имя пользователя-владельца от процесса, создавшего этот файл. Кроме того, при создании файла из его записи
/etc/passwd
, соответствующей пользователю, переписывается имя его пер- вичной группы.
Пользователь-владелец и пользователь-группа могут быть изменены с помощью команд shell – chownи chgrp. В качестве первого параметра этих команд записываются, соответственно, символьное имя нового пользова- теля или имя новой группы. В качестве других параметров записываются имена тех файлов, для которых производится замена. В некоторых UNIX-системах командыchownи chgrpмогут выдаваться прежним владельцем файла, а в других – только суперпользователем.
При создании файла в его дескриптор записываются не только имя поль- зователя-владельца и его первичной группы, но и права доступа к файлу трех разновидностей его пользователей: 1) пользователь-владелец; 2) пользова- тель-группа; 3) остальные пользователи системы.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Правами доступа к файлу называются формы доступа
к файлу, разрешенные для этого пользователя.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Суперпользователь всегда имеет неограниченные права доступа. Права доступа остальных пользователей могут быть ограничены.
Различают основные и дополнительные формы доступа. Перечислим ос- новные формы доступа к файлу:
1) чтение файла – r;
2) записьв файл – w;
3) выполнениефайла – x. Выполнение файла означает, что этот файл яв- ляется исполняемым файлом программы и может быть выполнен по-
122 сле загрузки в ОП как машинная программа или же файл является ко- мандным (скриптом).
Например, суперпользователь имеет по отношению к любому файлу не- ограниченные права доступа – rwx.
Применительно к каталогу перечисленные формы доступа имеют особен- ный смысл. Операция «чтение каталога» означает получение перечня имен файлов, записанных в данном каталоге. Получения никакой другой информа- ции о файлах эта форма доступа не предполагает. Например, форма доступа r достаточна для того, чтобы выполнить команду shell – ls без флагов, но не достаточна для выполнения этой же команды с флагом -l, так как наличие это- го флага предполагает использование информации, хранящейся не в каталоге, а в блоках управления файлами.
Для получения дополнительной информации о дочерних файлах каталога необходимо иметь к нему форму доступа x (выполнение). Эта же форма необ- ходима для того, чтобы сделать каталог текущим (с помощью команды cd). Бо- лее того, чтобы сделать каталог текущим, необходимо иметь форму доступа x ко всем каталогам в имени-пути данного каталога. Иначе в данный каталог мы не попадем.
Очевидно, что для создания файла (в том числе и каталога) мы должны иметь форму доступа w (запись) к родительскому каталогу. Эта же форма до- ступа требуется и при удалении файла. Может показаться странным, но для удаления файла какие-то формы доступа к нему самому не требуются. При этом, если форма доступа w кфайлу есть, команда удаления файла rm не выда- ет на экран дополнительного запроса подтвердить удаление файла. Иначе – та- кой запрос выдается. Применительно к каталогу сочетание прав r и x позволяет получить интересный эффект, называемый «темным каталогом». Он заключа- ется в том, что для всех пользователей, кроме владельца, запрещено чтение ка- талога, но разрешено его выполнение. Поэтому только «посвященные» пользо- ватели, знающие о наличии файла в каталоге, имеют возможность работать с ним.
Для того чтобы узнать права доступа к файлам текущего каталога, вос- пользуемся командой ls с флагом -l.
123
· · · · · · · · · · · · · · · · · · · · · · · · · ·
Пример
· · · · · · · · · · · · · · · · · · · · · · · ·
$ ls -l
$ - rw-r-
- r- -
1 vlad gro 1120 Dec15 15:03 abc.txt d rwxr–
xr- -
2 vlad gro 11500 Aug28 17:38 mac
$
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Информация о файле, выданная UNIX, состоит из 8 колонок. В первой позиции первой колонки записан тип файла (d – каталог; «-» – прочий файл).
В остальных девяти позициях первой колонки записаны права доступа к файлу: первые три символа – права доступа пользователя-владельца; вторые три сим- вола – права доступа пользователя-группы; последние три символа – права до- ступа прочих пользователей [6].
В приведенном примере для первого файла владелец имеет права доступа rw (понятно, что «выполнять» текстовый файл бессмысленно), а все остальные пользователи, включая и членов группы, могут только читать информацию из файла. Что касается второго файла (это каталог), то его владелец обладает все- ми правами доступа; член группы – всеми правами, за исключением записи, а остальные пользователи могут только читать файл.
Что касается остальных колонок информации о файлах, то в них содер- жится:
1) число жестких связей – количество каталогов, в которых «зарегистри- рован» данный файл;
2) имя пользователя-владельца файла;
3) имя пользователя-группы;
4) длина файла в байтах;
5) дата последнего изменения файла;
6) время последнего изменения;
7) имя файла.
Владелец файла может не только вывести права доступа на экран, но и внести в них изменения. Для этого используется команда shell – chmod.
Ее общий формат:
| u | | + | | r |
124 chmod
| g | | – | | w | <имя файла> [<имя файла…>],
| o | | = | | x |
| a | где «u» – владелец; «g» – группа; «o» – остальные пользователи; «a» – все пользователи; «+» – добавить; «–» – удалить; «=» – присвоить.
· · · · · · · · · · · · · · · · · · · · · · · · · ·
Пример
· · · · · · · · · · · · · · · · · · · · · · · ·
Следующая команда лишает членов пользователя-группы файла abcfile права на запись и выполнение этого файла: chmod g-wx abcfile
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Проверка прав доступа к файлу выполняется в момент открытия файла программой процесса. Если пользователь – владелец процесса одновременно является и владельцем файла, то принадлежность пользователя к группе не проверяется. Если пользователь процесса не является владельцем файла, то проверяется его принадлежность к пользователю-группе. В случае принадлеж- ности к группе пользователь процесса наделяется правами группы, иначе – пра- вами доступа к файлу для остальных пользователей [7].
Кроме основных форм доступа (и соответствующих прав) к файлам, су- ществуют дополнительные формы доступа, каждая из которых может рассмат- риваться как модификатор формы доступа x (выполнение):
1) s (для пользователя – владельца файла) – динамически задать имя пользователя процесса таким, каково оно у владельца файла. Данная форма доступа, как и следующая, имеет смысл только для выполни- мых файлов. Такая форма доступа, например, позволяет пользователю производить замену своего пароля, запуская утилиту passwd. Вла- дельцем исполняемого файла этой утилиты является суперпользова- тель, который одновременно является и владельцем файла паролей.
Так как этот исполняемый файл предоставляет своему владельцу (су- перпользователю) права доступа r, x и s,а всем остальным пользова- телям права доступа r и x, то при его запуске процесс пользователя получает временно в качестве имени владельца имя суперпользовате- ля и поэтому может выполнять запись в файл паролей. Естественно, что программа passwd написана так, что пользователь может заме- нить только свой пароль, не влияя на пароли других пользователей;
125 2) s (для пользователя – группы файла) – динамически задать имя поль- зователя-группы процесса таким, каково оно у пользователя-группы файла. Данная форма доступа похожа на предыдущую, но использует- ся реже ее;
3) t– в настоящее время используется только для каталогов, разрешая пользователю удалять только те файлы, для которых он является вла- дельцем, или в которых ему разрешена запись. Например, такая форма доступа назначается каталогу /tmp, предназначенному для хранения временных файлов всех пользователей. Имея форму доступа w (за- пись) к этому каталогу, пользователь, тем не менее, не может удалить файлы других пользователей.
Для просмотра дополнительных прав доступа по-прежнему используется команда ls с флагом -l. При наличии дополнительного права доступа для ка- кого-то пользователя (владелец, группа или остальные пользователи) вместо права x, которое в этом случае обязательно, записывается его модификатор s или t.
После того как мы рассмотрели основные методы поддержки мультипро- граммирования и многопользовательской работы, перейдем к рассмотрению укрупненной структуры ОС.
4.3 Укрупненная структура операционной системы
На рисунке 4.3 приведена укрупненная структура операционной системы
UNIX. Основная часть ОС, выполняемая в привилегированном режиме ЦП, называется ядром. Подсистемы ядра выполняют управление основными объек- тами ВС: процессами, файлами, периферийными устройствами, центральным процессором и оперативной памятью. Часть программ ОС реализована вне яд- ра. Сюда относятся интерпретаторы команд ОС (shell), а также системные демоны (init, getty, rlogin и т. д.).
Напомним, что shell, как и другие обрабатывающие системные и при- кладные процессы, имеет управляющий терминал, позволяющий пользователю влиять на выполнение своих программ. Демоны, наоборот, не имеют управля- ющего терминала, что позволяет им жить «вечно» (до перезагрузки системы).
Все обрабатывающие процессы, а также демоны пользуются услугами ядра, используя для обращения к нему системные вызовы. По своей форме каждый системный вызов представляет собой машинную команду передачи
126 управления – call, int или jmp. В однопрограммной системе (например, в MS-DOS) все системные вызовы выполняются командой int (команда пре- рывания). В мультипрограммных системах роль этой команды скрыта от при- кладных программ благодаря интерфейсу системных вызовов.
Рис. 4.3 Укрупненная структура ОС
Интерфейс системных вызовов содержит процедуры, доступные для вы- зова программами, расположенными вне ядра, а также подпрограммы, распо- ложенные внутри ядра и недоступные для такого вызова. Первые процедуры принято называть «заглушками», и обычно эти процедуры объединены в DLL.
Для вызова «заглушки» прикладная программа использует обычную команду
127 call (вызов процедуры). После того как требуемая «заглушка» вызвана, она сама переключает ЦП в привилегированный режим, используя команду int или jmp, и одновременно запускает скрытую подпрограмму ядра, выполняю- щую координационные функции. Суть этих функций сводится к тому, что в со- ответствии с принятыми параметрами вызова (как и любая другая, процедура
«заглушка» получает параметры) определяется последовательность внутренних процедур ядра, подлежащих исполнению.
После того как последовательность внутренних процедур ядра завершена,
«заглушка», возможно, возвратит управление в прикладную программу. Такой возврат выполняется в том случае, если выполняемый системный вызов являет- ся синхронным. При асинхронном системном вызове прикладная программа не должна ждать завершения запрошенной работы ядра, и поэтому сразу же после запуска скрытой подпрограммы ядра «заглушка» возвращает управление в вы- звавшую ее программу.
Обратим внимание, что функции подсистемы ввода/вывода, а также функции управления аппаратурой не доступны для непосредственного исполь- зования в прикладных программах. Это принципиально отличает мультипро- граммную систему от однопрограммной, в которой все эти функции доступны в любой программе.
Рассмотренная укрупненная схема присуща не только UNIX, но, с неко- торыми отличиями, и другим мультипрограммным системам. Основное разли- чие здесь заключается в распределении функций между ядром и внешними процессами. В другой модели операционных систем, называемой моделью
«клиент-сервер», значительная часть функций ядра передается внешним про- цессам, то есть демонам. Теперь эти демоны становятся серверами, предназна- ченными для обслуживания прикладных процессов (клиентов). Для получения системного обслуживания процесс-клиент посылает сообщение серверу, ис- пользуя ядро как «почту». После того как требуемая системная функция вы- полнена, сервер посылает ответное сообщение, также пользуясь «почтовыми» услугами ядра. При использовании данной модели ядро выполняет лишь наиболее часто используемые функции, к которым относятся, например, пере- дача сообщений между процессами или обработка прерываний. Такое ядро принято называть микроядром. Заметим, что реализация данной модели ОС возможна без изменения программного интерфейса системных вызовов. Для этого достаточно поручить посылку сообщения для сервера ранее упомянутой процедуре-«заглушке». Эта же процедура может выполнять прием ответных