Введение в безопасность UNIX

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

Основы информационной безопасности

Презентация 5-01: информационная безопасность

Информационная безопасность — меры по защите информации от неавторизованного доступа, разрушения, модификации, раскрытия и задержек в доступе. Основой информационной безопасности любой организации является политика безопасности.

Политика безопасности

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

Важным элементом политики безопасности является управление доступом: ограничение или исключение несканкционированного доступа к информации и программным средствам. При этом используются два основных понятия: объект и субъект системы. Объектом системы мы будем называть любой её идентифицируемый ресурс (например, файл или устройство). Доступом к объекту системы — некоторую заданную в ней операцию над этим объектом (скажем, чтение или запись). Действительным субъектом системы назовем любую сущность, способную выполнять действия над объектами (имеющую к ним доступ). Действительному субъекту системы соответствует некоторая абстракция, на основании которой принимается решение о предоставлении доступа к объекту или об отказе в доступе. Такая абстракция называется номинальным субъектом. Например, студент МГТУ — действительный субъект, его пропуск в МГТУ — номинальный. Другим примером может служить злоумышленник, прокравшийся в секретную лабораторию с украденной картой доступа — он является действительным субъектом, а карта — номинальным (см. Рисунок 2.16, «Объект и субъект безопасности»).

Рисунок 2.16. Объект и субъект безопасности

Объект и субъект безопасности


Презентация 5-02: политика безопасности

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

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

Политика безопасности включает в себя технические, организационные и правовые аспекты, в рамках этих лекций рассматривается только технический аспект.

Управление доступом

Презентация 5-03: управление доступом

Существует несколько схем управления доступом, называемых моделями доступа. Рассмотрим самые известные из них:

Мандатная модель доступа

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

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

Списки доступа (Accecc Control Lists, ACL)

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

Недостатками можно считать огромный размер таблицы и сложность администрирования в случае большого числа объектов и субъектов в системе.

Произвольное управление доступом

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

Свойством этой схемы (достоинством и одновременно недостатком) является значительное упрощение управления доступом, что не позволяет строить сложные отношения между субъектами и объектами.

Аутентификация и авторизация

Презентация 5-04: аутентификация и авторизация

Авторизация — это процесс определения того, имеет или не имеет некоторый субъект доступ к некоторому объекту. Авторизация может быть:

статической

вопрос о доступе к объекту решается один раз, когда права задаются или изменяются, при этом пользователю ставится в соответствие некоторый номинальный субъект системы;

динамической

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

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

Концепции безопасности UNIX

Презентация 5-05: концепции безопасности UNIX

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

Пользователи и группы

В UNIX роль номинального субъекта безопасности играет пользователь. Каждому пользователю выдается (обычно — одно) входное имя (login). Каждому входному имени соответствует единственное число, идентификатор пользователя (User IDentifier, UID). Это число и есть ярлык субъекта (номинальный субъект), которым система пользуется для определения прав доступа.

Каждый пользователь входит в одну или более групп. Группа — это список пользователей системы, имеющий собственный идентификатор (Group IDentifier, GID). Поскольку группа объединяет нескольких пользователей системы, в терминах политики безопасности она соответствует понятию множественный субъект. Значит, GID — это ярлык множественного субъекта, каковых у номинального субъекта может быть более одного. Таким образом, одному UID соответствует список GID.

Роль действительного (работающего с объектами) субъекта играет процесс. Каждый процесс снабжен единственным UID: это идентификатор запустившего процесс номинального субъекта, т. е. пользователя. Процесс, порожденный некоторым процессом пользователя, наследует его UID[1]. Таким образом, все процессы, запускаемые по желанию пользователя, будут иметь его идентификатор. UID учитываются, например, когда один процесс посылает другому сигнал. В общем случае разрешается посылать сигналы «своим» процессам (тем, что имеют такой же UID).

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

Роль основного объекта доступа в UNIX играют объекты файловой системы. В архитектуре UNIX в файловой системе представлены не только обычные файлы с данными, там присуствуют и специальные файлы для устройств, каналов, сокетов и т. д. Благодаря этому регулирование доступа к файлам позволяет покрыть очень широкий спектр ситуаций доступа и служит основным средством организации политики доступа в UNIX.

В соответствии с субъект-субъектной моделью каждый файл снабжен ярлыком, в котором хранятся идентификаторы номинальных субъектов, которые вправе распоряжаться доступом к данному файлу. В случае UNIX это идентификатор пользователя-владельца (UID) и идентификатор группы-владельца (GID). Обратите внимание, что файл может принадлежать только одной группе, в то время как пользователь может входить в несколько групп.

На уровне файловой системы в UNIX определяется три вида доступа: чтение (read, r), запись (write, w) и использование (execution, x). Право на чтение из файла дает доступ к содержащейся в нем информации, а право записи — возможность ее изменять. Право использования трактуется по-разному в зависимости от типа файла. В случае обычного файла оно означает возможность исполнения файла, т. е. запуска программы или командного сценария, содержащейся в этом файле. Для каталога использование — это возможность доступа к файлам этого каталога (точнее говоря, к атрибутам этих файлов — имени, правам доступа и т. п.).

При каждом файле имеется ярлык, в котором зафиксированы права доступа к нему. Права доступа включают список из девяти пунктов (три тройки): по три вида доступа для трех групп — пользователя-владельца, группы-владельца и всех остальных. Каждый пункт в этом списке может быть либо разрешён, либо запрещён (равен 0 либо 1). Таким образом, для хранения этой информации о правах доступа достаточно 9 бит.

Рисунок 2.17. Базовые права доступа в UNIX

Базовые права доступа в UNIX


При обращении процесса к файлу (с запросом доступа определённого вида, т. е. на чтение, запись или исполнение) система проверяет совпадение идентификаторов владельцев процесса и вадельцев файла в определённом порядке, и в зависимости от результата применяет ту или иную группу прав. Рассмотрим последовательность проверки прав на примере (см. Рисунок 2.18, «Последовательнось проверки прав доступа в UNIX»). Пусть файл имеет следующие атрибуты:

file.txt   alice:users   rw- r-- ---

Т. е. файл принадлежит пользователю «alice», группе «users» и имеет права на чтение и запись для владельца и только на чтение для группы, для всех остальных не разрешается никакой вид доступа.

Презентация 5-06: последовательность проверки

Пусть к файлу обращается с запросом на чтение процесс, владельцем которого является пользователь bob. Bob не является владельцем данного файла, однако он является членом группы [users]. Значит, он имеет права на чтение этого файла.

Строго говоря, при этом проверяется не собственно идентификатор пользователя процесса (UID), а т. н. исполнительный идентификатор пользователя, EUID. Он существует в связи с тем, что в ходе выполнения процесс может менять субъект, от имени которого он исполняется. Подробнее об этом сказано в разделе «Подмена идентификатора процесса».

Рисунок 2.18. Последовательнось проверки прав доступа в UNIX

Последовательнось проверки прав доступа в UNIX


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

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

Таким образом, из своего каталога пользователь может удалить любой файл. Часто возникает ситуация, когда каталог нужно использовать совместно — в этом случае необходимо разрешить запись в него либо группе пользователей, либо всем пользователям (например, общесистемный каталог для временных файлов). А если запись в каталог разрешена всем, то любой пользователь сможет удалить в нём любой файл. Для избежания этой проблемы был добавлен специальный атрибут — sticky bit[2] При установке этого атрибута пользователь, имеющий доступ на запись в этот каталог, может изменять только принадлежащие ему файлы.

Подмена идентификатора процесса

Презентация 5-07: подмена идентификатора процесса

В UNIX существует механизм подмены идентификатора (SetUID), позволяющий пользователям запускать процессы с идентификаторами других пользователей. Этот механизм применяется в тех случаях, когда процессу для выполнения определённых операций необходимо предоставить повышенные права (например, суперпользователя) или права другого пользователя.

Подмена идентификатора в том случае, если процесс запустит вместо себя при помощи системного вызова exec() программу из файла, в правах доступа которого установлен бит подмены идентификатора пользователя (SUID-бит, обозначается s в символьной записи прав доступа). Запущенный из этого файла процесс получит исполнительный идентификатор владельца (EUID) файла вместо идентификатора владельца процесса-родителя (см. Рисунок 2.19, «Подмена идентификатора процесса»), благодаря чему UID процесса сохраняет информацию о том, кто на самом деле запустил программу.

Рисунок 2.19. Подмена идентификатора процесса

Подмена идентификатора процесса


В современных UNIX-системах предусмотрен и ещё один дополнительный атрибут — SetGID, бит подмены идентификатора группы. Этот механизм работает совершенно аналогично подмене идентификатора пользователя, с тем отличием, что процесс, запущенный из файла с атрибутом SetGID, получает идентификатор группы-владельца файла, UID же его остается неизменным. Использование SetGID позволяет весьма гибким образом контролировать ситуацию повышения прав доступа процесса.

Особое значение имеют атрибуты подмены идентификатора (SetUID и SetGID), установленные на каталогах (о других правах доступа для каталогов сказано в разделе «Разделяемые каталоги») — для каталогов тоже используются права на исполнение, хотя и имеют другой смысл, чем у исполняемых файлов. Атрибут SetGID, установленный на каталоге, указывает, что файлы и подкаталоги, создаваемые внутри этого подкаталога любыми процессами, будут получать тот же идентификатор группы, что и сам каталог. Причем подкаталоги будут также наследовать атрибут SetGID. Такой механизм используется для организации обзих каталогов, файлы в которых должны быть доступны на равных условиях группе пользователей. Атрибут SetUID, установленный на каталоге, просто игнорируется.

Атрибуты подмены идентификаторов пользователя и группы несут потенциальную угрозу безопасности сиситемы и должны использоваться с осторожностью.

Ограничения базовой модели доступа и её расширения

Простота системы прав доступа UNIX приводит к некоторым ограничениям. К примеру, стандартными средствами UNIX невозможно создать такое положение вещей, когда одна группа пользователей могла бы только читать из файла, другая — только запускать его, а всем остальным файл вообще не был бы доступен. Другое дело, что такое положение вещей встречается нечасто.

Со временем в различных версиях UNIX стали появляться расширения прав доступа, позволяющие устанавливать права на отдельные объекты системы. Поначалу это были так называемые флаги — дополнительные атрибуты файла, не позволяющие, например, переименовывать его или удалять из него информацию при записи (можно только дописывать). Флаги не устраняют главного недостатка, зато их легко организовать без изменения файловой системы: каждый флаг занимает ровно один бит.

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

На практике флаги или списки доступа использовать приходится нечасто. В большинстве случаев такая необходимость возникает в виде исключения — например, для временного понижения прав или для временного предоставления доступа некоторомым пользователям (легко сделать с помощью ACL), а также при работе с очень важными файлами.

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

Презентация 5-08: суперпользователь

Пользователь root (он же суперпользователь) имеет нулевые UID и GID и играет роль доверенного субъекта UNIX. Это значит, что он не подчиняется законам, которые управляют правами доступа, и может по своему усмотрению эти права изменять. Большая часть общезначимых (не принадлежащих конкретным пользователям) компонентов системы доступны для модификации только суперпользователю.

Как было сказано ранее (см. раздел «Беглый взгляд на архитектуру UNIX»), в UNIX существует уровень доступа ядра и уровень доступа системы. Суперпользователь работает на уровне доступа ядра, так что является по сути неотъемлемым компонентом самой системы.

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

Администрирование в UNIX (т. е. управление общезначимыми характеристиками системы) требует привилегий суперпользователя. При работе с повышенными привилегиями, в особенности от имени пользователя root следует быть очень осторожным: выполнение неверной команды может привести к выходу системы из строя и утрате информации. Поэтому даже администраторы никогда не работают в командной оболочке с правами суперпользователя всё время, а переходят в режим суперпользователя только тогда, когда это действительно необходимо (например, с помощью команды su).

Аутентификация пользователей

Презентация 5-09: вход пользователя в систему

В UNIX сеанс работы пользователя начинается с его аутентификации и заканчивается его выходом из системы. При входе в систему выполняется следующая последовательность действий (см. Рисунок 2.20, «Регистрация пользователя в системе»):

  1. процесс getty ожидает реакции пользователя на одной из терминальных линий, в случае активности пользователя выводит приглашение ввести регистрационные данные пользователя;
  2. после ввода имени пользователя запускается программа login, которая проверяет подлинность данных пользователя. Стандартным механизмом является проверка пароля, заданного для данного пользователя;
  3. убедившись, что пароль введён правильно, login запускает командную оболочку с установленными UID и GID данного пользователя. Таким образом, права доступа любого процесса (действительного субъекта), запущенного пользователем в этом сеансе работы, будут определяться правами номинального субъекта UID+GID.

Рисунок 2.20. Регистрация пользователя в системе

Регистрация пользователя в системе


При работе регистрации на удалённом компьютере роль getty исполняет сетевой демон, например ssh.

В современных UNIX-системах существуют расширения систем авторизации и аутентификации, позволяющие интегрировать в процесс аутентификации любые дополнительные процедуры. Например, в Linux-системах этот механизм называется подключаемые модули аутентификации (Pluggable Authentication Modules, PAM). Рассмотрение этих средств выходит за рамки данного курса.

Управление пользователями и правами доступа

База данных пользователей системы

Презентация 5-10: база данных пользователей

Все данные о пользователях UNIX хранит в файле /etc/passwd в текстовом виде. Каждому пользователю соответствует одна строка, поля которой разделяются двоеточиями:

входное имя:x:UID:GID:полное имя:домашний каталог:стартовый shell

Пример 2.4. Пример файла /etc/passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
adm:x:3:4:adm:/var/adm:/bin/false
...


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

Из примера видно, что некоторые пользователи имеют «неправильные» командные оболочки, работа в которых невозможна. Это сделано специально для того, чтобы исключить возможность входа таких пользователей в систему, а соответствующие учетные записи в /etc/passwd принадлежат псевдопользователям, от имени которых выполняются некоторые системные задачи и которыми не пользуются реальные люди.

Пароли на вход в систему пользователей в UNIX не хранятся в открытом виде, хранятся только их хэши (набор байт, получаемый из пароля с помощью односторонней функции). Даже если злоумышленник получит значение этого хэша, ему придется подбирать пароль, применяя данную одностороннюю функцию к различным словам и сравнивая со значением хэша. Часто хэши хранятся в спациальном файле (например, /etc/shadow), доступ к которому разрешен только системе, так что перебор вообще не возможен.

Аналогичным образом информация о группах хранится в файле /etc/group. Каждой строке файла соответствует информация о группе: её имя, числовой идентификатор и список пользователей, входящих в эту группу.

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

Изменение базы данных пользователей

Для добавления и удаления пользователей и групп существует набор специальных утилит: useradd, userdel, groupadd, groupdel. Эти команды доступны только суперпользователю и имеют единственный обязательный параметр: имя пользователя или группы.

С помощью команд usermod и groupmod можно изменять информацию в базах данных пользователей и групп. Эти команды также может выполнять только администратор системы.

Команда passwd позволяет простым пользователям изменять свой системный пароль, а суперпользователю — изменять пароль любого из пользователей системы.

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

Для изменения владельца файла или группы владельцев используются команды chown и chgrp. Из соображений безопасности эти утилиты доступны только суперпользователю.

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

Ограничения сеанса пользователя

Презентация 5-11: ограничения сеанса пользователя

В UNIX существует ряд динамических ограничений, накладываемых на процесс аутентификации пользователя и запущенные им программы. Ограничения можно разделить на следующие группы:

ограничения входа в систему

Вход пользователя в систему может быть ограничен видом терминала, удалённым адресом (в случае сетевого входа в систему), временем работы. Для задания этих ограничений в некоторых UNIX-системах используется файл /etc/login.access

ограничения запускаемых процессов

Процессы пользователей могут быть ограничены по одному из следующих параметров: объём используемой памяти, число одновременно открытых файлов, число запускаемых процессов и т. п. Для задания этих ограничений в некоторых UNIX-системах используется файл /etc/limits.

ограничения использования диска

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

Ограничения действуют на протяжении всего сеанса работы пользователя.

Резюме

Презентация 5-12: резюме

Основой информационной безопасности любого предприятия является политика безопасности, которая включает в себя технические, организационные и правовые аспекты.

Основными элементами политики безопасности являются субъект, объект и отношения между ними. Выделяют ряд моделей доступа, среди которых мандатный доступ, списки доступа (субъект-объектная модель) и произвольное управление доступом (субъект-субъектная модель).

В операционной системе UNIX номинальным субъектом учётная запись пользователя, действительным субъектом — процесс пользователя, а объектом — файл. Три основных вида прав доступа: чтение, запись и исполнение, а также дополнительные права (подмены субъекта и разделяемости каталога). Права доступа указываются для трех групп: владельца объекта, группы-владельца и всех остальных.

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

Информация о пользователях системы хранится в специальном файле /etc/passwd. Существует набор системных утилит для управления базой данных пользователей и групп.

В UNIX можно устанавливать динамические ограничения на сеанс пользователя.

Ключевые термины: информационная безопасность, политика безопасности, объект, доступ, действительный субъект, номинальный субъект, модель доступа, мандатная модель, модель списков доступа, произвольное управление доступом, авторизация, аутентификация, пользователь, группа, права доступа в UNIX, исполнительный идентификатор пользователя, sticky-бит, подмена идентификатора, SUID-бит, суперпользователь, сеанс работы, база данных пользователей, основная группа, дисковые квоты

Дополнительные материалы

  1. Скотт Манн, Эленн Митчелл, Митчелл Крелл Безопасность Linux. — М.: Вильямс, 2003. — 624 с.: ил.
  2. Курячий Г.В. Операционная система UNIX. — М.: Интуит.Ру, 2004. — 292 с.: ил.

Вопросы

Презентация

Рисунок 2.21. Презентация 5-01: информационная безопасность

Презентация 5-01: информационная безопасность


Рисунок 2.22. Презентация 5-02: политика безопасности

Презентация 5-02: политика безопасности


Рисунок 2.23. Презентация 5-03: управление доступом

Презентация 5-03: управление доступом


Рисунок 2.24. Презентация 5-04: аутентификация и авторизация

Презентация 5-04: аутентификация и авторизация


Рисунок 2.25. Презентация 5-05: концепции безопасности UNIX

Презентация 5-05: концепции безопасности UNIX


Рисунок 2.26. Презентация 5-06: последовательность проверки

Презентация 5-06: последовательность проверки


Рисунок 2.27. Презентация 5-07: подмена идентификатора процесса

Презентация 5-07: подмена идентификатора процесса


Рисунок 2.28. Презентация 5-08: суперпользователь

Презентация 5-08: суперпользователь


Рисунок 2.29. Презентация 5-09: вход пользователя в систему

Презентация 5-09: вход пользователя в систему


Рисунок 2.30. Презентация 5-10: база данных пользователей

Презентация 5-10: база данных пользователей


Рисунок 2.31. Презентация 5-11: ограничения сеанса пользователя

Презентация 5-11: ограничения сеанса пользователя


Рисунок 2.32. Презентация 5-12: резюме

Презентация 5-12: резюме




[1] Из этого правила есть некоторые исключения, обеспечивающие штатные для системы способы повышения и понижения уровня доступа процесса (см. раздел «Подмена идентификатора процесса»).

[2] На русский этот термин не очень удачно переводится либо как «липкий бит», либо как «бит навязчивости». Чтобы избежать неудобного термина многие просто называют его t-битом (t-атрибутом), по обозначению, которое используется для указания этого атрибута в символьной записи прав доступа.