Компания ALT Linux
Опубликован: 14.12.2004 | Доступ: свободный | Студентов: 12603 / 1647 | Оценка: 4.19 / 3.84 | Длительность: 18:18:00
ISBN: 978-5-9556-0019-1
Лекция 10:

Аутентификация и права доступа в UNIX

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >

Иерархия прав доступа

Выдача команды ls -l содержит, помимо прочего, информацию о правах доступа к файлу:

alt$ ls -l /bin/sh /etc/anacrontab
-rwxr-xr-x 1 root  root    375276 Окт 9 
                                19:22 /bin/sh

-rw-r----- 1 root  adm     363 Дек 29 
                         1999 /etc/anacrontab

В приведенном примере файл /etc/anacrontab принадлежит пользователю root и группе adm, а файл /bin/sh - пользователю root и группе root (совпадение имени пользователя и группы не случайно, но это все же разные ярлыки - UID и GID).

Начало строки содержит знакомые нам символы r, w и x. Самый первый символ - тип файла (для каталогов вместо " - " будет d, для символьных ссылок - l и т. п.). Следующие девять символов надо рассматривать по три: первая тройка - права доступа к файлу его хозяина (субъекта, UID которого совпадает с UID файла); обозначим эту тройку буквой u (user). Вторая тройка - это права доступа члена группы (субъекта, GID одной из групп которого совпадает с GID файла); обозначим эту тройку буквой g (group). Наконец, последняя тройка описывает права доступа постороннего (не хозяина и не члена группы ); эта тройка обозначается буквой o (other). Все три группы принято обозначать буквой a (all).

Если доступ определенного вида разрешен, в выдаче ls будет стоять соответствующая буква в соответствующей тройке, а если нет - вместо нее появится прочерк (знак " - ").

Когда некий процесс желает сделать что-нибудь с некоторым файлом, система для начала проверяет, не является ли он хозяином этого файла. Если UID процесса и файла совпадают, права доступа определяются по первой тройке. Если UID не совпадает, но субъект с этим UID входит в группу, GID которой совпадает с GID файла, права доступа определяются по второй тройке. Наконец, если ни UID, ни GID файла не имеют отношения к номинальному субъекту, система воспользуется третьей тройкой. В приведенном выше примере право на запись в оба файла имеет только пользователь root, право читать из файла /etc/anacrontab имеют root и члены группы adm, а читать (например, копировать) и запускать файл /bin/sh могут и хозяин, и члены группы root, и все остальные.

Изменить хозяина или группу файла можно командами соответственно chown и chgrp. Правда, первую из них обычному пользователю запускать незачем: если хозяин файла не он, система не даст выполнить chown. Да и группу файла субъект может сменить только при наличии прав на запись и только на такую, в которой он состоит.

Изменить права доступа к файлу можно командой chmod. Формат команды в общем виде таков: "chmod аудитория способ_изменения права список_файлов". Здесь аудитория - строчка из символов u, g, o и a (означающих, как уже говорилось, права для хозяина, группы, остальных или всех сразу); способ_изменения - один из символов +, - или =, означающих соответственно разрешение, запрет, или точную установку прав доступа ; права - это строчка из символов r, w и x. Конструкций вида аудитория способ_изменения права в команде может быть несколько, тогда они разделяются запятой.

$ chmod a=r,u=rw file   
    # установить права rw-r--r--
$ ls -al file
-rw-r--r-- 1 george  staff  0 Dec 4 11:22 file
$ chmod o-rwx file  
    # запретить посторонним все
$ ls -al file   
-rw-r----- 1 george  staff  0 Dec 4 11:22 file

Принимая во внимание то, что атрибут - это один бит (есть доступ или нет), весь список атрибутов может быть представлен двоичным числом, в котором на месте " - " стоит 0, а на месте буквы - 1. В нашем примере последнее значение атрибутов файла было -rw-r-----, т. е. 0110100000. На самом деле именно так атрибуты представлены в системе, поэтому вместо длинного слова "атрибут" часто говорят просто "бит": "x-бит" - право на выполнение и т. п. Вместо двоичной записи удобно использовать восьмеричную: восьмеричная цифра занимает ровно три бита, поэтому каждая rwx-тройка попадет в отдельную цифру. Восьмеричное представление поддерживает и chmod ; этот способ менее нагляден, но более лаконичен: например, чтобы сразу установить права -rw-r----- файлу file, достаточно команды chmod 640 file. Восьмеричная система счисления вообще удобна: среди цифр нет букв, таблица умножения проще, чем в десятичной системе (не говоря уже о шестнадцатеричной), цифра занимает ровно три бита... когда-то она была очень популярна; но шестнадцатеричная вытеснила ее за счет краткости и того, что байт в ней занимает ровно две цифры, а не 2+2/3, как в восьмеричной.

Разделяемые каталоги

Как уже говорилось, права записи в каталог организованы так, что из своего каталога пользователь может удалить чей угодно файл. Хуже того: если в каталог разрешено писать целой группе или вообще всем, то любой из имеющих право записи может удалить или переименовать чужой файл. Значит, улучив момент, можно этот файл подменить: процесс файл закрыл, потом открыл, да уже другой. Что делать? На такой случай придуман еще один атрибут: так называемый t-бит:

freebsd$ ls -ald /tmp
drwxrwxrwt 5 root wheel 512 Dec 4 10:12 /tmp

Несмотря на то что ls ставит t вместо x, t-бит - еще один, десятый (формально - девятый, так как биты принято нумеровать с нуля) бит атрибутов каталога; в восьмеричной записи права на /tmp выглядели бы как 1777.

В свое время t-бит придумали для исполняемых файлов. Процесс, запущенный из файла с этим атрибутом, нельзя было выгружать из памяти в область подкачки (swap), отсюда и его официальное название: бит навязчивости (sticky bit). Годы идут, политика распределения оперативной памяти меняется, и это свойство t-бита давно не используется (в некоторых системах нынче выгружаются даже ненужные страницы памяти ядра). Навязчивость каталогу ни к чему, поэтому для каталога t-бит имеет другой смысл: пользователь, которому разрешена запись в каталог, имеющий атрибут t, может изменять только названия собственных файлов (проверяется совпадение UID).

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >
Max Akt
Max Akt

Я прохожу курс "Операционная система Unix" и после тестов, вижу в отчете, что этот тест сдало еще 25 человек. Почему так мало, это ведь реально хороший и полезный урок. Здесь естьи теория и практичесские материалы. Сам курс написан хорошо, живым языком. И здесь я получил ответы на вопросы по Linux, которые боялся спросить. Наверное это из-за того, что в названии курса написано не Linux, а Unix и это многих отпугивает.

Andranik Avakian
Andranik Avakian

41. УК РФ и Комментарии (ст. 273)

М. 2000 г. Издательство: ALT Linux, Институт Логики

Уголовный Кодекс РФ и комментарии к нему?

По ссылке открывается сайт документации Linux, раздел Linux Installation and Getting Started