Дискреционное управление доступом#

Примечание

Термин «дискреционный» означает совершающийся или используемый по чьему-либо личному усмотрению; дающий кому-либо возможность поступать по своему личному усмотрению, основанный на такой возможности.

Общие сведения#

Дискреционное управление доступом в ОС Linux обеспечивает возможность управления доступом к данным самими пользователями операционной системы.

Дискреционное управление доступом применяется к каждому субъекту (пользователю) и сущности (файлу, каталогу).

Механизм дискреционного управления доступом именованных субъектов к именованным сущностям обеспечивает создание для каждой пары субъект-сущность явного и недвусмысленного перечисления разрешенных типов доступа, формирующих правила разграничения доступа (ПРД).

На защищаемые именованные сущности при их создании автоматически устанавливаются базовые дискреционные ПРД в виде:

  • идентификаторов пользователя-владельца (UID) и группы-владельца (GID), которые вправе распоряжаться доступом к данной сущности;

  • прав доступа данных субъектов к созданной сущности.

Сущностями доступа являются:

  • файлы;

  • каталоги;

  • соединения (сокеты);

  • сетевые пакеты;

  • механизмы IPC (разделяемая память, очереди сообщений и др.).

Права доступа#

Доступ к сущности определяется тремя видами операций:

  • чтение (read, символьный код r, восьмеричный код 4, битовая маска 100);

  • запись (write, символьный код w, восьмеричный код 2, битовая маска 010);

  • исполнение (execution, буквенный код x, восьмеричный код 1, битовая маска 001).

В записях прав доступа на первом месте всегда операция чтения, на втором — операция записи, а на третьем — операция исполнения.

Права доступа к сущности определяют разрешенные с ней операции для каждого из трех классов субъектов:

  • пользователь-владелец сущности (user, u);

  • группа-владелец сущности (group, g);

  • все остальные (other, o).

При отображении/указании прав доступа к сущности на первом месте записываются права доступа пользователя-владельца, на втором — группы-владельца, на третьем — прочих субъектов доступа.

Указываться права доступа могут символьной строкой, восьмеричными числами или битовыми масками

При обозначении символьной строкой каждый тип операции обозначается соответствующим ему символьным кодом, а отсутствие права на операцию — символом «–» в соответствующей позиции, например:

  • rwx — разрешены все операции;

  • r-x — разрешены операции чтения и исполнения (r и x), а операция записи запрещена.

При обозначении восьмеричными числами используются суммы восьмеричных чисел разрешенных операций, например:

  • символьной строке rwx соответствует восьмеричная цифра 7 (4+2+1);

  • символьной строке r-x соответствует восьмеричная цифра 5 (4+0+1).

При обозначении битовыми масками суммируются битовые маски разрешенных операций:

  • символьной строке rwx соответствуют восьмеричная цифра 7 и битовая маска 111;

  • символьной строке r-x соответствуют восьмеричная цифра 5 и битовая маска 101.

Набор прав доступа к сущности для всех классов субъектов может быть представлен:

  • символьной строкой из 9 символов, по три символа для каждого класса субъектов доступа: rwxr-xr-x;

  • строкой из трех восьмеричных цифр, по одной цифре для каждого класса субъектов доступа: 755;

  • битовой маской, по три бита для каждого класса субъектов доступа: 111 101 101.

При обращении субъекта к сущности (с запросом операции определенного вида, т. е. на чтение, запись или исполнение) система проверяет совпадение идентификаторов UID и GID процесса с идентификаторами UID и GID файла в определенном порядке, и, в зависимости от результата, применяет ту или иную группу прав.

Права доступа сущности могут быть изменены, если это разрешено (санкционировано) текущими правилами разграничения доступа.

Дополнительно для сущностей могут быть установлены следующие специальные биты:

  • SUID (Set User ID) — бит, позволяющий запускать исполняемый файл с правами пользователя-владельца;

  • SGID (Set Group ID) — бит, позволяющий запускать исполняемый файл с правами группы-владельца;

  • Sticky — бит, ограничивающий удаление чужих файлов в каталоге.

Когда пользователь или процесс запускают исполняемый файл с установленными битами SUID и/или SGID, то файл запускается с правами своего владельца и/или группы (в зависимости от того, какой бит задан). Таким образом, пользователь может запускать файлы даже от имени root, не обладая его привилегиями.

При установке на каталог бита SGID все вновь создаваемые в нем файлы будут наследовать группу каталога, а вновь создаваемые подкаталоги — и группу каталога, и SGID-бит (установка SUID-бита на каталог ни на что не влияет).

Sticky-бит используется для ограничения удаления объектов в каталоге. При его установке на каталог удалять или переименовывать сущности в этом каталоге сможет только их владелец или суперпользователь. Это полезно при совместной работе нескольких пользователей, так как без Sticky-бита любой пользователь с правами записи в каталог сможет удалять в нем любые файлы, включая созданные другими пользователями. Установить или снять Sticky-бит с каталога может владелец каталога или root. Установка Sticky-бита на файл ни на что не влияет.

Списки контроля доступа ACL#

В дополнение к правам доступа к сущностям в ОС поддерживаются списки контроля доступа ACL (Access Control List), реализованные на основе расширенных атрибутов файловых систем.

ACL состоит из набора записей, каждая из которых описывает права доступа.

Использование ACL позволяет задавать права доступа индивидуально для любых пользователей и/или групп пользователей, дополняя и расширяя базовый механизм «пользователь- владелец — группа-владелец — все остальные».

С помощью ACL доступ может быть предоставлен пользователю или группе независимо от доступа других пользователей, участия в группах и предоставления доступа к иным сущностям.

Linux-привилегии#

Linux-привилегии используются для предоставления отдельным пользователям прав выполнения определенных административных действий и являются стандартными для системы Linux.

К Linux-привилегиям относятся: CAP_CHOWN, CAP_DAC_OVERRIDE, CAP_DAC_READ_SEARCH, CAP_FOWNER, CAP_FSETID, CAP_KILL, CAP_SETGID, CAP_SETUID, CAP_SETPCAP, CAP_LINUX_IMMUTABLE, CAP_NET_BIND_SERVICE, CAP_NET_BROADCAST, CAP_NET_ADMIN, CAP_NET_RAW, CAP_IPC_LOCK, CAP_IPC_OWNER, CAP_SYS_MODULE, CAP_SYS_RAWIO, CAP_SYS_CHROOT, CAP_SYS_PTRACE, CAP_SYS_PACCT, CAP_SYS_ADMIN, CAP_SYS_BOOT, CAP_SYS_NICE, CAP_SYS_RESOURCE, CAP_SYS_TIME, CAP_SYS_TTY_CONFIG, CAP_MKNOD, CAP_LEASE.

Совет

Более подробное описание дискреционного управления доступом приведено в Руководстве по КСЗ Эксплуатационной документации на ОС СН Astra Linux Special Edition.