
- •4 Курс, 1 семестр
- •Оглавление
- •1 Введение в ос unix
- •1.1 История создания
- •1.2 Базовые концепции
- •1.3 Архитектура unix
- •1.4 Пользователи системы
- •1.5 Пользовательская среда Unix.
- •2 Файловая подсистема
- •2.1 Понятие
- •2.2 Логическая структура файловой системы
- •2.3 Имена файлов в ос unix
- •2.4 Типы файлов
- •2.5 Права доступа к файлам
- •2.6 Физическое размещение файловой системы
- •2.7 Особенности размещения файловой системы sVfs
- •2.8 Особенности размещения файловой системы ffs (ufs)
- •2.9 Монтирование файловых систем
- •2.10 Восстановление файловой системы
- •2.11 Типы файловых систем unix
- •3 Подсистема управления процессами
- •3.1 Понятие процесса
- •3.2 Логическая организация процессов
- •3.3 Жизненный цикл процесса
- •3.4 Реализация процессов
- •3.4.1 Состав процесса
- •3.4.2 Структуры управления процессом
- •3.4.3 Файловая система /proc
- •3.5 Нити (потоки)
- •Причины появления нитей
- •Типы нитей
- •3) Прикладные нити. Существует возможности поддержки нитей полностью на прикладном уровне, при этом ядру об их существовании ничего не известно.
- •3.5 Планирование
- •3.5.1 Задачи планировщика
- •3.5.2 Приоритеты процессов
- •3.5.3 Реализация планировщика
- •3.5.4 Расчет приоритета
- •3.5.5 Особенности планирования в Linux
- •3.6 Взаимодействие между процессами (Interprocess Communication, ipc)
- •3.6.1 Введение
- •3.6.2 Взаимодействие родственных процессов
- •3.6.3 Взаимодействие произвольных процессов
- •Разделяемая память.
- •Передача сообщений.
- •Семафоры.
- •3.6.4 Межпроцессное взаимодействие с помощью файловой системы
- •4 Управление памятью
- •4.1 Понятие виртуальной памяти
- •4.2 Свопинг
- •4.3 Страничное замещение
- •4.4 Стратегия замещения страниц
- •5 Подсистема ввода-вывода
- •5.1 Основные задачи
- •5.2 Типы устройств ввода-вывода в ос
- •5.3 Общая схема
- •5.4 Драйвера
- •5.5 Буферизация
- •5.6 Поддержка операций ввода-вывода
- •6 Unix в сетях
- •6.1 Конфигурация tcp/ip
- •6.2 Основные сетевые утилиты
- •6.3 Основные сетевые интерфейсы
- •6.4 Доступ к сетевым ресурсам
- •6.5 Сетевые службы Unix
2.5 Права доступа к файлам
В операционной системе UNIX используется трехуровневая иерархия пользователей: группа, подгруппа, пользователь. В связи с этим каждый файл файловой системы обладает двумя атрибутами. Первый атрибут - это, так называемый, владелец файла. Этот атрибут связан с одним конкретным пользователем, который является владельцем файла. Владельцем файла можно стать по умолчанию, если создать этот файл, а также есть команда, которая позволяет менять владельца файла. Второй атрибут - это атрибут, связанный с защитой доступа к файлу.
Доступ к каждому файлу регламентируется по трем категориям. Первая категория - это права владельца файла. В общем случае владелец не обязательно может делать с этим файлом все что угодно. Вторая категория - права группы, к которой принадлежит владелец файла, (отличные от прав владельца). Третья категория - права остальных пользователей системы, за исключением соответствующей группы. По этим трем категориям регламентируются три действия - чтение из файла, запись в файл и исполнение файла. В каждом файле определено, может ли пользователь данной категории читать файл, писать в него и запускать его как исполняемый в качестве процесса.
Набор прав хранится в индексном дескрипторе данного файла.
Базовые биты прав доступа представлены в таблице. Там дано восьмеричное значение, задающее соответствующий бит, вид этого бита в первом столбце длинного листинга и право, задаваемое этим битом.
Таблица 3 – Формирование прав доступа
Восьмеричное значение |
Вид в столбце прав доступа |
Право или назначение бита |
4000 |
---s------ |
Установленный эффективный идентификатор владельца (бит SUID) |
2000 |
------s--- |
Установленный эффективный идентификатор группы (бит SПID) |
1000 |
---------t ---------T |
Клейкий (sticky) бит. Вид для каталогов и выполняемых файлов, соответственно. |
0400 |
-r-------- |
Право владельца на чтение |
0200 |
--w------- |
Право владельца на запись |
0100 |
---x------ |
Право владельца на выполнение |
0040 |
----r----- |
Право группы на чтение |
0020 |
-----w---- |
Право группы на запись |
0010 |
------x--- |
Право группы на выполнение |
0004 |
-------r-- |
Право всех прочих на чтение |
0002 |
--------w- |
Право всех прочих на запись |
0001 |
---------x |
Право всех прочих на выполнение |
Бит чтения для всех типов файлов имеет одно и то же значение: он позволяет читать содержимое файла (получать листинг каталога командой ls).
Бит записи также имеет одно и то же значение: он позволяет редактировать этот файл. Для каталога – это возможность менять его содержимое, т.е. создавать и удалять файлы.
Если для некоторого файла установлен бит выполнения, то файл может выполняться как команда. В случае установки этого бита для каталога, этот каталог можно сделать текущим (перейти в него командой cd).
Установленный бит смены идентификатора пользователя SUID означает, что доступный пользователю на выполнение файл будет выполняться с правами (с эффективным идентификатором) владельца, а не пользователя, вызвавшего файл (как это обычно происходит).
Установленный бит смены идентификатора группы SGID означает, что доступный пользователю на выполнение файл будет выполняться с правами (с эффективным идентификатором) группы-владельца, а не пользователя, вызвавшего файл (как это обычно происходит).
Примером может быть утилита passwd, позволяющая пользователю менять свой пароль. Для изменения пароля нужно редактировать содержимое файла /etc/passwd и /etc/shodow. Предоставить права всем изменять содержимое этих файлов невозможно. Установка SUID для утилиты passwd позволяет решить эту проблему. Владельцем файла /usr/bin/passwd, в котором хранится утилита является суперпользователь. Кто бы ни запустил утилиту на выполнение, на время работы данной программы получает права суперпользователя, а значит, может производить изменения в системных файлах.
Если бит SGID установлен для файла, не доступного для выполнения, он означает обязательное блокирование, т.е. неизменность прав доступа на чтение и запись пока файл открыт определенной программой.
Установленный клейкий бит для обычных файлов ранее (во времена PDP-11) означал необходимость сохранить образ программы (т.е. код и данные) в памяти после выполнения (для ускорения повторной загрузки). Сейчас при установке обычным пользователем он сбрасывается. Значение этого бита при установке пользователем root зависит от версии ОС и иногда необходимо. Так, в ОС Solaris необходимо устанавливать клейкий бит для обычных файлов, используемых в качестве области подкачки.
Установка клейкого бита для каталога означает, что файл в этом каталоге может быть удален или переименован только в следующих случаях:
пользователем-владельцем файла;
пользователем-владельцем каталога;
если файл доступен пользователю на запись;
пользователем root.
Примером может служить каталог /tmp, который открыт на запись для всех пользователей, но в котором нежелательно удалять чужие файлы.
Как изменяются права доступа при копировании и перемещении файла?
Ответ на этот вопрос зависит от многих условий
кто копирует (перемещает) файлы, root или обычный юзер
какие программы, и с какими ключами при этом используются
копируется файл "на пустое место" или там уже существует файл с таким именем
Ситуация 1 – при копировании создается новый файл
При копировании (например, командой cp) создается новый файл. А при перемещении (например, командой mv) меняется только место расположения файла (и, возможно, имя).
Поэтому, если "рядовой юзер" копирует файл, то действуют все те же правила, что и при создании файла. То есть, владельцем копии становится юзер, который ее создал, группа "наследуется" от директории, а сами права доступа определяются параметром umask.
Если копирование делает root, то эти правила действуют и для него (то есть, владельцем полученной копии будет root, группа будет взята от директории, а права выставятся в соответствии с umask). Однако, root может изменить поведение команды cp. У этой команды есть ключ (-p - сохранять permissions) который означает, что надо сохранить все атрибуты (владельца, группу и permissions) при копировании.
Обычный же юзер, даже используя ключ -p не сможет сохранить владельца и группу, но получит permissions такие же, как у оригинального файла. К тому же биты suid и sgid при этом также "сбрасываются".
Ситуация 1 – при копировании файл с таким именем уже существует
В этом случае файл не создается, а только замещается его содержимое. Поэтому, даже если эту операцию проделает обычный юзер (естественно, для этого надо, чтобы ему было разрешено писать в существующий файл), все атрибуты, в том числе владелец и группа сохранятся. Правда, биты suid и sgid все равно "сбросятся".
А вот при перемещении файла все атрибуты сохраняются (даже "опасные" биты suid и sgid). Однако, не забудьте, что для того, чтобы обычный юзер смог переместить чужой файл, он должен иметь право записи и в ту директорию, куда файл переносится и в ту, откуда он переносится (поскольку, там запись о файле должна быть удалена). Такие ситуации в нормальной системе, как правило, не встречаются.