Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Защита файла и права доступа



Файлы имеют права доступа в целях конфиденциальности и безопасности. Права досту­па (access rights), или разрешения, хранятся в виде, в котором они применяются для трех различных групп пользователей: для самого пользователя, его группы и всех осталь­ных. Этим трем группам пользователей могут быть назначены различные права доступа для трех типов доступа к файлу: для чтения, записи и выполнения. Когда мы вызываем список файлов с помощью Is -al, мы можем видеть разрешения файлов.

lkp: -# Is -al /home/Sophia

drwxr-xr-x 22 sophia sophia4096 Mar 14 15: 13

drwxr-xr-x 24 root root4096 Mar 7 18: 47..

drwxrwx----- 3 sophia department4096 Mar 4 08: 37 sources

Первым элементом списка идет разрешение для домашней директории sophia. В соответствии с ним она разрешает всем видеть ее директорию, но не изменять ее. Сама она может ее читать, редактировать и исполнять2. Второй элемент означает права доступа к родительской директории /home; /home принадлежит к root, но тем не менее он позво­ляет всем ее читать и выполнять. В домашней директории sophia у нее есть директория с именем sources, которую позволено читать, изменять и запускать ей самой, членам ее группы с именем department и не позволено всем остальным.

Файловые режимы

В дополнение к правам доступа файл имеет три дополнительных режима: sticky, suid и sgid. Рассмотрим каждый из них.

sticky

Файл с включенным битом sticky содержит «t» в последнем символе поля mode (на­
пример, -rwx----------- 1). Возвращаясь к тем временам, когда доступ к дискам был значи­
тельно медленнее, чем сейчас, когда памяти было меньше и соответствующие методоло­
гии еще не были доступны3, исполнимый файл имел активный бит sticky, позво­
ляющий ядру держать исполнимый файл в памяти во время его выполнения. Для активно
используемых программ это позволяло увеличить производительность, снижая потреб­
ность в доступе к информации из файла на диске.

1 Опции передаются в качестве параметров для системного вызова mount.

2 Разрешение на выполнение применительно к директории означает, что пользователь может в нее входить.
Разрешение на выполнение применительно к файлу означает, что он может быть запущен на выполнение
и применяется только в отношении исполнимых файлов.

3 Это связано с технологией использования принципа локальности с предпочтением загрузки частей программ.
Более подробно это описано в гл. 4.


Обзор ядра Linux



Когда бит sticky активен для директории, он бережет файлы от удаления и пере­именования со стороны пользователей, имеющих права на изменение данной директории (write permission) (за исключением root и хозяина файла).

Suid

Исполнимый файл с установленным битом suid содержит «s», где символ «х» относится

к биту пользовательского разрешения исполнения (например, -rws----------------- ). Когда

пользователь выполняет исполнимый файл, процесс ассоциируется с вызвавшим его пользователем. Если у исполнимого файла установлен бит suid, процесс наследует ЦШ владельца файла и доступ к соответствующим правам доступа. Таким образом, мы при­ходим к концепции реального пользовательского ID (real user ID) как противополож­ности эффективного пользовательского ID (effective user ID). Как мы вскоре увидим при рассмотрении процессов в главе «Процессы», реальный ID процесса соответствует пользователю, который запустил процесс. Эффективный UID зачастую совпадает с ре­альным ЦШ за исключением случаев, когда в файле стоит бит suid. В этом случае эф­фективный UID содержит UID владельца файла.

Файл suid часто используется хакерами, которые-вызывают исполнимый файл, при­надлежащий к root с установленным битом suid, и перенаправляют программные опера­ции для выполнения инструкций, которые им в противном случае не разрешено выпол­нять с разрешениями root.

sgid

Исполнимый файл с установленным битом sgid содержит «s» в том месте, где символ

«х» относится к биту разрешения исполнения для группы (например, -rwxrws------ ). Бит

действует почти так же, как и бит suid, но применяется по отношению к группе. Про­цесс также получает реальный групповой ID (real group ID) и эффективный группо­вой ID (effective group ID), которые содержат GID пользователя и GID группы файла со­ответственно.

Файловые метаданные

Файловые метаданные - это вся информация о файле, не включающая его содержание. Для примера, метаданные содержат тип файла, его размер, ЦШ его пользователя, права доступа и т. д. Как мы вскоре увидим, некоторые типы файлов (устройства, каналы и со-кеты) не содержат данных, а только метадданые. Все метаданные файла, за исключением имени файла, хранятся в inode или в индексном узле (index node); inode - это блок ин­формации, который имеет каждый из файлов. Дескриптор файла (file descriptor) - это внутриядерная структура данных для управления данными файла. Файловые дескрип­торы назначаются, когда процесс обращается к файлу.



Глава 1 • Обзор


Типы файлов

UNIX-подобные системы имеют несколько типов файлов.

Обычные файлы

Обычные файлы обозначаются черточкой в первом символе поля mode (например, -rw-rw-rw-). Обычные файлы могут содержать ASCII или бинарные данные либо могут быть исполнимыми файлами. Ядро не интересуется тем, какой тип данных хранится в файле, и поэтому не делает различия между ними. Тем не менее пользовательские про­граммы могут учитывать эту разницу. Обычные файлы могут хранить свои данные в нуле и большем количестве блоков данных1.

Директории

Директории обозначаются буквой «d» в первом символе поля mode (например,

drwx------------ ). Директория - это файл, который хранит связь между файловыми именами

и индексными узлами файла. Директория состоит из таблицы вхождений, каждая из ко­торых относится к содержащемуся в директории файлу; Is -al перечисляет все со­держимое директории и Ю связанного с ней inode.

Блочные устройства

Блочные устройства обозначаются буквой «Ь» в первом символе поля mode (напри­
мер, brw-------------- ). Эти файлы представляют аппаратные устройства, ввод-вывод на ко­
торые выполняется блоками дискретного размера, кратными степени 2. К блочным
устройствам относятся диски и ленточные накопители, доступные через директорию
/dev файловой системы. Обращение к диску может требовать времени; поэтому передача
данных для блочных устройств выполняется с помощью буфера кеширования (buffer
cache) ядра, который хранит временные данные для уменьшения количества дорогих
обращений к диску. В некоторые моменты ядро просматривает данные в буфере кеширо­
вания и синхронизирует с диском данные, которые нужно обновить. Таким образом
значительно повышается производительность, однако в случае компьютерного сбоя это
может привести к потере буферизированных данных, если они еще не были записаны на
диск. Синхронизацию с диском можно вызвать принудительно с помощью системных вы­
зовов sync, f sync и fdatasync, которые сразу записывают буферизированные данные
на диск. Блочное устройство не использует никаких блоков данных, поскольку не со­
держит никакой информации. Применяется только inode для хранения информации.

Символьные устройства

Символьные устройства обозначаются буквой «с» в первом символе поля mode (на­
пример, crw-------------- ). Эти файлы представляют аппаратные устройства, не имеющие

блочной структуры и ввод-вывод которых представляет собой поток байтов, передавае-

1 Пустой файл занимает 0 блоков.


Обзор ядра Linux



мых напрямую между драйвером устройства и процессом-получателем. К этим устройст­вам относятся терминалы и параллельные устройства, доступные через директорию /dev файловой системы. Псевдоустройства (pseudo devices), или устройства, которые не пред­ставляют аппаратные устройства, а являются набором функций на стороне ядра, также от­носятся к символьным устройствам. Также эти устройства известны как raw-устройства, из-за того, что не содержат промежуточного кеша для хранения данных. Используется только inode для хранения информации.

Ссылки

Ссылки обозначаются буквой «1» в первом символе поля mode (например, lrw-----

----- ). Ссылка - это указатель на файл. Этот тип файлов позволяет создавать несколько

ссылок на файл, данные которого хранятся в файловой системе в единственном экземп­ляре. Существует два типа ссылок: жесткие ссылки (hard link) и символические (sym­bolic), или временные, ссылки (soft link). Оба типа создаются с помощью вызова In. Же­сткие ссылки имеют ограничения, отсутствующие у символических. Это ограничения на связь файлов только внутри одной файловой системы, невозможность ссылаться на дирек­тории и несуществующие файлы. Ссылки сохраняют разрешения файла, на который они ссылаются.

Именованные каналы

Именованные каналы обозначаются буквой «р» в первом символе поля mode (напри­
мер, prw-------------- ). Канал - это файл, который осуществляет связь между программами,

работая как канал данных; данные, записываются в него одной программой и считывают-ся другой. Канал буферизует данные, вводимые первым процессом. Именованные каналы также известны как FIFO, потому что обычно записанные первыми данные извлекаются тоже первыми. Подобно файлам устройств, каналы не используют блоки данных, а только inode.

С оке ты

Сокеты обозначаются буквой «s» в первом символе поля mode (например, srw-----

----- ). Сокеты - это специальные файлы, которые также отвечают за связь между двумя

процессами. Единственная разница между каналами и сокетами в том, что сокеты позво­ляют устанавливать связь между процессами на разных компьютерах, соединенных се­тью. Файлы сокетов также не ассоциируются блоками данных. Так как в этой книге не рас­сматриваются вопросы, связанные с сетью, мы не будем касаться внутренней реализации сокетов.

Типы файловых систем

Файловая система Linux содержит интерфейс, позволяющий сосуществовать нескольким типам файловых систем. Тип файловой системы определяется способом разбиения блочных данных и манипуляциями с физическим устройством, а также типом этого фи-



Глава 1 • Обзор


зического устройства. В качестве примеров типов файловых систем можно привести системы на дисках, смонтированных по сети, такие, как NFS, и размещенные на локальных дисках, такие, как ext3, являющейся базовой файловой системой Linux. Не­которые специальные файловые системы, такие, как /ргос, предоставляют доступ к дан­ным и адресному пространству ядра.

1.9.3.8 Управление файлами

При обращении к файлу в Linux управление проходит через несколько уровней. Во-первых, программа, которая хочет получить доступ к файлу, делает системный вызов, такой, как ореп(), геасЦ ) или write (). Затем управление передается ядру, которое исполняет этот системный вызов. Существует высокоуровневая абстракция файловой системы, называемая VFS, которая определяет тип файловой системы (например, ext2, minix и ins do s), содержащей файл, и далее передает управление соответствующему драйверу файловой системы.

Драйвер файловой системы осуществляет работу с файлом на заданном логическом устройстве. Жесткий диск может иметь разделы msdos или ext2. Драйвер файловой сис­темы знает, как интерпретировать данные, хранимые на диске, и использовать все связан­ные с ними метаданные. Поэтому драйвер файловой системы хранит содержащиеся в фай­ле данные и дополнительную информацию, такую, как отметка времени, групповые и пользовательские режимы и разрешения файла (на запись/чтение/исполнение).

После этого драйвер файловой системы вызывает низкоуровневый драйвер, который выполняет все операции чтения данных с устройства. Этот низкоуровневый драйвер знает о блоках, секторах и всей аппаратной информации, необходимой для того, чтобы взять ку­сок данных и сохранить его на устройстве. Низкоуровневый драйвер передает информа­цию драйверу файловой системы, который интерпретирует и форматирует необработан­ную информацию и посылает ее VFS, которая, наконец, посылает блок данных обратно са­мой программе.

Процессы

Если мы представим операционную систему как каркас того, что сможет создать разра­ботчик, мы можем представить процессы в виде базовых элементов, ответственных за выполнение этим каркасом необходимых действий. Точнее говоря, процесс - это выпол­няемая программа. Отдельная программа может быть выполнена много раз, поэтому с каждой программой может быть ассоциировано больше одного процесса.

Концепция процессов приобрела популярность с появлением многопользователь­ских систем в 1960-х. Представьте себе однопользовательскую операционную систему, где процессор выполняет только один процесс. В этом случае никакие другие программы не могут выполняться до тех пор, пока текущий процесс не будет завершен. Когда появи­лось несколько пользователей (или нам потребовалась многозадачная функциональ­ность), нам нужно изобрести механизм переключения между задачами.


1.9 Обзор ядра Linux



Модель процессов позволяет выполнять несколько задач благодаря реализации кон­текста выполнения (execution context). В Linux каждый процесс работает так, как будто он единственный. Операционная система управляет контекстами, назначая им процес­сорное время в соответствии с определенным набором правил. Эти правила назначает и выполняет планировщик (scheduler). Планировщик отслеживает продолжительность выполнения процесса и выключает его для того, чтобы ни одни из процессов не занимал все процессорное время.

Контекст выполнения состоит изо всего, что связано с программой, т. е. ее данных (и доступного для нее пространства адресов в памяти), ее регистров, стека, указателя сте­ка и значения счетчика программы. За исключением данных и адресации памяти осталь­ные компоненты процесса являются прозрачными для программиста. Тем не менее опера­ционной системе требуется управлять стеком, указателем стека, счетчиком программы и машинными регистрами. В многопроцессорной системе операционная система должна дополнительно отвечать за переключение контекстов (context switch) между процесса­ми и распределять между этими процессами ресурсы системы.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-03-25; Просмотров: 875; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.028 с.)
Главная | Случайная страница | Обратная связь