Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Защита файла и права доступа
Файлы имеют права доступа в целях конфиденциальности и безопасности. Права доступа (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 (на 1 Опции передаются в качестве параметров для системного вызова mount. 2 Разрешение на выполнение применительно к директории означает, что пользователь может в нее входить. 3 Это связано с технологией использования принципа локальности с предпочтением загрузки частей программ. Обзор ядра 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 (напри Символьные устройства Символьные устройства обозначаются буквой «с» в первом символе поля mode (на блочной структуры и ввод-вывод которых представляет собой поток байтов, передавае- 1 Пустой файл занимает 0 блоков. Обзор ядра Linux мых напрямую между драйвером устройства и процессом-получателем. К этим устройствам относятся терминалы и параллельные устройства, доступные через директорию /dev файловой системы. Псевдоустройства (pseudo devices), или устройства, которые не представляют аппаратные устройства, а являются набором функций на стороне ядра, также относятся к символьным устройствам. Также эти устройства известны как raw-устройства, из-за того, что не содержат промежуточного кеша для хранения данных. Используется только inode для хранения информации. Ссылки Ссылки обозначаются буквой «1» в первом символе поля mode (например, lrw----- ----- ). Ссылка - это указатель на файл. Этот тип файлов позволяет создавать несколько ссылок на файл, данные которого хранятся в файловой системе в единственном экземпляре. Существует два типа ссылок: жесткие ссылки (hard link) и символические (symbolic), или временные, ссылки (soft link). Оба типа создаются с помощью вызова In. Жесткие ссылки имеют ограничения, отсутствующие у символических. Это ограничения на связь файлов только внутри одной файловой системы, невозможность ссылаться на директории и несуществующие файлы. Ссылки сохраняют разрешения файла, на который они ссылаются. Именованные каналы Именованные каналы обозначаются буквой «р» в первом символе поля mode (напри работая как канал данных; данные, записываются в него одной программой и считывают-ся другой. Канал буферизует данные, вводимые первым процессом. Именованные каналы также известны как 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; Просмотров: 912; Нарушение авторского права страницы