logo search
Сборная ответов к госэкзаменам

Вопрос 40.1. Права доступа на файлы и директории в ос Unix. Команды смен прав доступа

В операционной системе UNIX существуют три базовых класса доступа к файлу, в каждом из которых установлены соответствующие

права доступа:

UNIX поддерживает три типа прав доступа для каждого класса: на чтение (read, обозначается символом r), на запись (write, обозначается символом w) и на выполнение (execute, обозначается символом х). С помощью команды Is -l можно получить список прав доступа к файлу:

-rw-r--r--

1

andy

group

36482

Dec 22

19:13

Report.txt.1

drwxr-xr--

2

andy

group

64

Aug 15

11:03

Temp

-rwxr-xr---

1

andy

group

4889

Dec 22

15:13

a.out

rw-r--r--

1

andy

group

7622

Feb 11

09:13

Cont.c

Права доступа листинга отображаются в первой колонке (за исключением первого символа, обозначающего тип файла). Наличие права доступа обо­значается соответствующим символом, а отсутствие — символом '-'. Рас­смотрим, например, права доступа к файлу a.out:

Тип файла

Права владельца-пользователя

Права владельца-группы

Права остальных пользова­телей

-

Rwx

R-x

R--

Обычный файл

Чтение, запись, выполнение

Чтение и выполнение

Только чтение

П рава доступа могут быть изменены только владельцем файла или супер­пользователем (superuser) — администратором системы. Для этого исполь­зуется команда chmod(l). Ниже приведен общий формат этой команды.

U

C hmod G + r

O - w

A = x

В качестве аргументов команда принимает указание классов доступа ('u' — владелец-пользователь, 'g' — владелец-группа, 'о' — остальные пользовате­ли, 'а' — все классы пользователей), права доступа ('r' — чтение, ‘w’ — за­пись и 'х' — выполнение) и операцию, которую необходимо произвести ('+' — добавить, '-' — удалить и '=' — присвоить) для списка файлов file 1, file2 и т. д. Например, команда

$ chmod g-wx ownfile

лишит членов группы-владельца файла ownfile права на запись и выполне­ние этого файла.

В одной команде можно задавать различные права для нескольких классов доступа, разделив их запятыми.

Приведем еще несколько примеров:

$ chmod a+w text

Предоставить право на запись для всех пользователей

$ chmod go=r text

Установить право на чтение для всех пользо­вателей, за исключением владельца

$ chmod g+x-w runme

Добавить для группы право на выполнение файла runme и снять право на запись

$ chmod u+w, og+r-w textl text2

Добавить право записи для владельца, право на чтение для группы и остальных пользова­телей, отключить право на запись для всех пользователей, исключая владельца

Последний пример демонстрирует достаточно сложную установку прав доступа. Вы можете установить сразу все девять прав доступа, используя числовую форму команды chmod(l):

$ chmod 754 *

Число определяется следующим образом: нужно представить права доступа в двоичном виде (0 — отсутствие соответствующего права, 1 — его нали­чие) и каждую триаду, соответствующую классу доступа, в свою очередь преобразовать в десятичное число.

Владелец

Группа

Остальные

R W X

r - х

r - -

111

101

100

7

5

4

Таким образом, приведенный пример эквивалентен следующей символь­ной форме chmod(l):

$ chmod u=rwx, g=rx, o=r

Значение прав доступа различно для разных типов файлов. Для файлов опе­рации, которые можно производить, следуют из самих названий прав досту­па. Например, чтобы просмотреть содержимое файла командой cat(l), поль­зователь должен иметь право на чтение (r). Редактирование файла, т. е. его изменение, предусматривает наличие права на запись (w). Наконец, для того чтобы запустить некоторую программу на выполнение, вы должны иметь соответствующее право (х). Исполняемый файл может быть как скомпили­рованной программой, так и скриптом командного интерпретатора shell. В последнем случае вам также понадобится право на чтение, поскольку при выполнении скрипта командный интерпретатор должен иметь возможность считывать команды из файла. Все сказанное, за исключением, пожалуй, права на выполнение, имеющего смысл лишь для обычных файлов и ката­логов, справедливо и для других типов файлов: специальных файлов уст­ройств, именованных каналов, и сокетов. Например, чтобы иметь возмож­ность распечатать документ, вы должны иметь право на запись в специаль­ный файл устройства, связанный с принтером. Для каталогов эти права имеют другой смысл, а для символических связей они вообще не использу­ются, поскольку контролируются целевым файлом.

Права доступа для каталогов не столь очевидны. Это в первую очередь связано с тем, что система трактует операции чтения и записи для ката­логов отлично от остальных файлов. Право чтения каталога позволяет вам получить имена (и только имена) файлов, находящихся в данном каталоге. Чтобы получить дополнительную информацию о файлах каталога (например, подробный листинг команды Is -/), системе придется "загля­нуть" в метаданные файлов, что требует права на выполнения для катало­га. Право на выполнения также потребуется для каталога, в который вы захотите перейти (т. е. сделать его текущим) с помощью команды cd (1). Это же право нужно иметь для доступа ко всем каталогам на пути к ука­занному. Например, если вы установите право на выполнения для всех пользователей в одном из своих подкаталогов, он все равно останется не­доступным, пока ваш домашний каталог не будет иметь такого же права.

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

$ pwd Где мы находимся?

/home/andrei

$ mkdir darkroom Создадим каталог

$ Is - 1 Получим его атрибуты

-rwxr--r— 2 andy group 65 Dec 22 19:13 darkroom

$ chmod a-r+x darkroom Превратим его в "темный" каталог $ Is - 1 Получим его атрибуты

wx—х — х 2 andy

$ ср filel darkroom Поместим в каталог darkroom некоторый файл

$ cd darkroom Перейдем в этот каталог

$ Is -1 darkroom Попытаемся получить листинг каталога

##permission denied Увы...

$ cat filel

ok

group 65 Dec 22 19:13 darkroom

Тем не менее, заранее зная имя файла (file1), можно работать с ним (например, прочитать, если есть соответ­ствующее право доступа)

Особого внимания требует право на запись для каталога. Создание и удале­ние файлов в каталоге требуют изменения его содержимого, и, следователь­но, права на запись в этот каталог. Самое важное, что при этом не учиты­ваются права доступа для самого файла. То есть для того, чтобы удалить не­который файл из каталога, не обязательно иметь какие-либо права доступа к этому файлу, важно лишь иметь право на запись для каталога, в котором находится этот файл. Имейте в виду, что право на запись в каталог дает большие полномочия, и предоставляйте это право с осторожностью. Правда, существует способ несколько обезопасить себя в случае, когда необходимо предоставить право на запись другим пользователям, — установка флага Sticky bit на каталог.

Итак, для выполнения операции над файлом имеют значение класс досту­па, к которому вы принадлежите, и права доступа, установленные для этого класса. Поскольку для каждого класса устанавливаются отдельные права доступа, всего определено 9 прав доступа, по 3 на каждый класс.

Операционная система производит проверку прав доступа при создании, открытии (для чтения или записи), запуске на выполнение или удалении файла. При этом выполняются следующие проверки:

Система проводит проверки в указанной последовательности. Например, если пользователь является владельцем файла, то доступ определяется ис­ключительно из прав владельца-пользователя, права владельца-группы не проверяются, даже если пользователь является членом владельца-группы. Чтобы проиллюстрировать это, рассмотрим следующее:

----rw-r-- 2 andy group 65 Dec 22 19:13 file1

Даже если пользователь andy является членом группы group, он не сможет ни прочитать, ни изменить содержимое файла filel. В то же время все ос­тальные члены этой группы имеют такую возможность. В данном случае, владелец файла обладает наименьшими правами доступа к нему. Разумеет­ся, рассмотренная ситуация носит гипотетический характер, поскольку пользователь andy в любой момент может изменить права доступа к дан­ному файлу как для себя (владельца), так и для группы, и всех остальных пользователей в системе.