<<
>>

Фундаментальные концепции

Сообщество пользователей операционной системы Linux состоит из зарегистрированных пользователей, каждый из которых имеет уникальный UID (User ID — идентификатор пользователя). UID представляет собой целое число в пределах от 0 до 65 535.
Идентификатором владельца помечаются файлы, процессы и другие ресурсы. По умолчанию владельцем файла является пользователь, создавший этот файл (хотя есть способ сменить владельца).

Пользователи могут организовываться в группы, которые также нумеруются 16-битными целыми числами, называемыми GID (Group ID — идентификатор группы). Назначение пользователя в группу выполняется вручную системным администратором и заключается в создании нескольких записей (в системной базе данных), в которых содержится информация о том, какой пользователь к какой группе принадлежит. Пользователь может одновременно принадлежать к нескольким группам. Чтобы не усложнять вопрос, мы более не станем обсуждать эту возможность.

Основной механизм безопасности в операционной системе Linux прост.

Каждый процесс несет на себе UID и GID своего владельца. Когда создается файл, он получает UID и GID создающего его процесса. Файл также получает набор разрешений доступа, определяемых создающим процессом. Эти разрешения определяют доступ к этому файлу для владельца файла, для других членов группы владельца файла и для всех прочих пользователей. Для каждой из этих трех категорий определяется три вида доступа: чтение, запись и исполнение файла, что обозначается буквами r, w и x (read, write, execute) соответственно. Возможность исполнять файл, конечно, имеет смысл только в том случае, если этот файл является исполняемой двоичной программой. Попытка запустить файл, у которого есть разрешение на исполнение, но который не является исполняемым (то есть он не начинается с соответствующего заголовка), закончится ошибкой.
Поскольку существуют три категории пользователей и три бита для каждой категории, все режимы доступа к файлу можно закодировать 9 битами. Некоторые примеры этих 9-битных чисел и их значения показаны в табл. 10.14.
Таблица 10.14. Примеры режимов защиты файлов

Первые два примера в табл. 10.14 очевидны. В них предоставляется полный доступ к файлу для владельца файла и его группы соответственно. В третьем примере группе владельца разрешается читать файл, но не разрешается его изменять, а всем посторонним запрещается всякий доступ. Вариант из четвертого примера часто применяется в тех случаях, когда владелец файла с данными желает сделать его публичным. Пятый пример показывает режим защиты файла, представляющего собой общедоступную программу. В шестом примере доступ запрещен всем. Такой режим иногда используется для файлов-пустышек, применяемых для реализации взаимных исключений, так как любая попытка создания такого файла приведет к ошибке, если такой файл уже существует. То есть если несколько программ одновременно попытаются создать такой файл в качестве блокировки, только первой из них это удастся. Режим, показанный в последнем примере, довольно странный, так как он предоставляет всем посторонним пользователям больше доступа, чем владельцу файла. Тем не менее такой режим допустим. К счастью, у владельца файла всегда есть способ изменить в дальнейшем режим доступа к файлу, даже если ему будет запрещен всякий доступ к самому файлу.

Пользователь, UID которого равен 0, является особым пользователем и называется суперпользователем (superuser или root). Суперпользователь может читать и писать все файлы в системе независимо от того, кто ими владеет и как они защищены. Процессы с UID = 0 также имеют возможность использовать небольшую группу защищенных системных вызовов, доступ к которым запрещен обычным пользователям.

Как правило, пароль суперпользователя известен только системному администратору, хотя многие студенты младших курсов смотрят на поиск дыр в системе безопасности, которые помогут им регистрироваться в системе в качестве суперпользователя, как на увлекательный спорт. Руководство компьютерных центров обычно недовольно такого рода активностью.

Каталоги — это файлы, они обладают теми же самыми режимами защиты, что и обычные файлы. Отличие состоит в том, что бит x интерпретируется для каталогов как разрешение не исполнения, а поиска в каталоге. Таким образом, каталог с режимом rwxr-xr-x позволяет своему владельцу читать, изменять каталог, а также искать в нем файлы, а всем остальным пользователям разрешает только читать каталог и искать в нем файлы, но не создавать в нем новые файлы и не удалять файлы из этого каталога.

У специальных файлов, соответствующих устройствам ввода-вывода, есть те же самые биты защиты. Благодаря этому для ограничения доступа к устройствам ввода-вывода может использоваться тот же самый механизм. Например, владельцем специального файла принтера /dev/lp может быть суперпользователь (root) или специальный пользователь — демон принтера. При этом режим доступа к файлу может быть установлен

равным rw--------- , чтобы все остальные пользователи не могли напрямую обращаться

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

Тот факт, что файлом /dev/lp владеет демон и этот файл имеет режим доступа rw----------- ,

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

Эта проблема была решена с помощью добавления к перечисленным выше 9 битам нового бита защиты, бита SETUID.

Когда выполняется программа с установленным битом SETUID, то рабочим UID (effective UID) этого процесса становится не UID вызвавшего его пользователя, а UID владельца исполняемого файла. Когда процесс пытается открыть файл, то проверяется его рабочий UID, а не действительный UID. Таким образом, если программой, обращающейся к принтеру, будет владеть демон с установленным битом SETUID, то любой пользователь сможет запустить ее и получить полномочия демона (например, права доступа к /dev/lp), но только для запуска этой программы (которая может ставить задания в очередь на принтер).

В операционной системе UNIX есть множество важных программ, владельцем которых является суперпользователь, но у них установлен бит SETUID. Например, программе passwd, позволяющей пользователям менять свои пароли, требуется доступ на запись в файл паролей. Если разрешить изменять этот файл кому угодно, то ничего хорошего не получится. Вместо этого есть программа, владельцем которой выступает root, и у файла этой программы установлен бит SETUID. Хотя у этой программы есть полный доступ к файлу паролей, она изменит только пароль вызвавшего ее пользователя и не даст доступа к остальному содержимому файла.

Помимо бита SETUID есть также еще и бит SETGID, который работает аналогично и временно предоставляет пользователю рабочий GID программы. Однако на практике этот бит используется редко.

10.7.2.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Фундаментальные концепции:

  1. 29. Концепция символического интеракционизма. Концепция управления впечатлениями
  2. НАУКА ФУНДАМЕНТАЛЬНАЯ
  3. Постановка фундаментальных вопросов
  4. Правило фундаментальности.
  5. Правило фундаментальности.
  6. ФУНДАМЕНТАЛЬНЫЙ МЕТОД.
  7. НЛП целиком построено на двух фундаментальных принципах:
  8. § 1. ФУНДАМЕНТАЛЬНАЯ (ОБЩАЯ) СОЦИОЛОГИЧЕСКАЯ ТЕОРИЯ КАК СУБЪЕКТ ПРИЛОЖЕНИЯ
  9. 52. Аномическая концепция девиации Опираясь на идею аномии, Роберт Мертон разработал аномическую концепцию девиации.
  10. Я-КОНЦЕПЦИЯ
  11. КОНЦЕПЦИЯ САМООРГАНИЗАЦИИ
  12. 2.1. Методологические концепции
  13. КОНЦЕПЦИЯ ДИСПОЗИЦИОННАЯ