Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборная ответов к госэкзаменам.doc
Скачиваний:
107
Добавлен:
02.09.2019
Размер:
7 Mб
Скачать

Вопрос 47.1. Расширенные атрибуты файлов и директорий (setuid, setguid, sticky). Списки прав доступа на файлы (acl). Алгоритмы планирования процессов

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

Дополнительные атрибуты также устанавливаются утилитой chmod(l), но вместо кодов 'г', 'w' или 'x' используются коды из табл. 1.3. Например, для установки атрибута SGID для файла filel необходимо выполнить команду

$ chmod g+s filel.

В табл. 1.3 приведены дополнительные атрибуты для файлов, и показано, как они интерпретируются операционной системой.

Код

Название

Значение

t

Sticky bit

Сохранить образ выполняемого файла в памяти после завершения выполнения

s

SetUID, SUID

Установить UID процесса при выполнении

s

SetGID, SGID

Установить GID процесса при выполнении

1

Блокирование

Установить обязательное блокирование файла

Таблица 1.3. Дополнительные атрибуты для обычных файлов

Установка атрибута Sticky bit (действительное название — save text mode) редко используется в современных версиях UNIX для файлов. В ранних версиях этот атрибут применялся с целью уменьшить время загрузки наи­более часто запускаемых программ (например, редактора или командного интерпретатора). После завершения выполнения задачи ее образ (т. е. код и данные) оставались в памяти, поэтому последующие запуски этой про­граммы занимали значительно меньше времени.

Атрибуты (или флаги) SUID и SGID позволяют изменить права пользова­теля при запуске на выполнение файла, имеющего эти атрибуты. При этом привилегии будут изменены (обычно расширены) лишь на время вы­полнения и только в отношении этой программы.

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

В качестве примера использования этого свойства рассмотрим утилиту passwd(l), позволяющую пользователю изменить свой пароль. Очевидно, что изменение пароля должно привести к изменению содержимого опре­деленных системных файлов (файла пароля /etc/passwd или /etc/shadow, или базы данных пользователей, если используется дополнительная защи­та системы). Понятно, что предоставление права на запись в эти файлы всем пользователям системы является отнюдь не лучшим решением. Уста­новка SUID для программы passwd(l) (точнее, на файл /usr/bin/passwd исполняемый файл утилиты passwd(l)) позволяет изящно разрешить это противоречие. Поскольку владельцем файла /usr/bin/passwd является суперпользователь (его имя в системе — root), то кто бы ни запустил утилиту passwd(l) на выполнение, во время работы данной программы он временно получает права суперпользователя, т. е. может производить запись в сис­темные файлы, защищенные от остальных пользователей.

$ Is -IFa /usr/bin/passwd

-r-sr-sr-x 3 root sys 15688 Oct 25 1995 /usr/bin/passwd

Понятно, что требования по безопасности для такой программы должны быть повышены. Утилита passwd(l) должна производить изменение пароля только пользователя, запустившего ее, и не позволять никакие другие опе­рации (например, вызов других программ).

Блокирование файлов позволяет устранить возможность конфликта, когда две или более задачи одновременно работают с одним и тем же файлом.

Однако вернемся к обсуждению дополнительных атрибутов для каталогов (табл. 1.4).

Таблица 1.4. Дополнительные атрибуты для каталогов

Код

Название

Значение

t

Sticky bit

Позволяет пользователю удалять только файлы, кото­рыми он владеет или имеет права на запись

S

Set GID, SGID

Позволяет изменить правило установки владельца-группы создаваемых файлов, аналогично реализован­ному в BSD UNIX

При обсуждении прав доступа отмечалось, что предоставление права на запись в каталог дает достаточно большие полномочия. Имея такое право, пользователь может удалить из каталога любой файл, даже тот, владельцем которого он не является и в отношении которого не имеет никаких прав, установка атрибута Sticky bit для каталога позволяет установить дополнительную защиту файлов, находящихся в каталоге. Из такого каталога пользователь может удалить только файлы, которыми он владеет, или на которые он имеет явное право доступа на запись, даже при наличии права на запись в каталог. Примером может служить каталог /tmp, который является открытым на запись для всех пользователей, но в котором может оказаться нежелательной возможность удаления пользователем чужих временных файлов.

Атрибут SGID также имеет иное значение для каталогов. При установке этого атрибута для каталога вновь созданные файлы этого каталога будут следовать владельца-группу по владельцу-группе каталога. Таким образом для UNIX версии System V удается имитировать поведение систем версии BSD, для которых такое правило наследования действует по умол­чанию.

Посмотреть наличие дополнительных атрибутов можно с помощью под­робного списка файлов:

$ is -1

drwxrwxrwxt 5 sys sys 367 Dec 19 20:29 /tmp

-r-sr-sr-x 3 root sys 15688 Oct 25 1995 /usr/bin/passwd

Таблица 1.5. Операции изменения атрибутов файла

Операция

Команда/системный вызов

Кому разрешено вызов

Изменение прав доступа

chmod(1)

Владелец

Изменение дополнитель­ного атрибута Sticky bit

chmod(1)

суперпользователь

Изменение дополнитель­ного атрибута SGID

chmod(1)

владелец, причем его GID так­же должен совпадать с иден­тификатором группы файла

Access Control List 

ACL - это список лиц или групп с указанием того что они могут делать, такой список есть у каждого ресурса.  Пример - папка на диске.  У процесса есть идентификатор пользователя, от лица которого он выполняется. Соответственно, при выполнении процесса таким образом проверяются полномочия. Иногда нужно что бы файл, запущенный обычным пользователем, обладал полномочиями администратора - для этого используются setuid и setguid - они задают пользователя от которого будет исполняться процесс вне зависимости от исполнителя;  stiky bit - задается на директорию - задает пользователя для файлов который создаются в этой директории.