Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МиСЗКИ_4_5.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
929.28 Кб
Скачать

4.1.1.2Иерархия пользователей и групп системы unix

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

Пользовательские идентификаторы представляются шестнадцатибитными целыми беззнаковыми числами и могут принимать значения от 0 до 65535. В операционных системах семейства UNIX нулевое значение пользовательского идентификатора зарезервировано за главным пользователем системы, обладающим особыми правами на все ресурсы системы, - суперпользователем. Соответ­ствующая учетная запись обычно используется для целей системного администрирования. Однако некоторые приложения могут использовать учетную запись суперпользователя для гарантированного доступа к ресурсам. Идентификаторы от 1 до 9 обычно используются для системных функций. Иден­тификаторы рядовых пользователей, как правило, начинаются с 20, 100 или 500. Некоторые новые реализации UNIX поддерживают тридцатидвухбитные идентификаторы пользователей.

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

Информация о всех пользователях системы хранится в специализированном файле - базе данных учетных записей. Таким файлом для стандартных ОС семейства UNIX является файл /etc/passwd. Файлы /etc/passwd и /etc/group являются одними из важнейших в ОС UNIX, поскольку опреде­ляют базу зарегистрированных пользователей, с которыми связаны права на ресурсы системы.

Файл passwd может быть прочитан кем угодно. Это необходимо, чтобы могли работать программы, проверяющие имена и идентификаторы пользо­вателей.

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

В первом поле указывается имя пользователя. Поле име­ни является единственным полем, значение которого должно быть уникальным.

Во втором поле хранится пароль пользователя в хэшированном виде. Первые два символа хэшированного пароля являются затравкой (salt). При каждой смене пароля затравка выбирается случайным образом. Длина хэшированного пароля в этом поле всегда равна 13 символам, причем некоторые из символов, такие как двоеточие и одинарная кавычка, никогда не встречаются среди них. Поле пароля может быть пустым. Если изменить пароль, хра­нящийся в поле, добавив к нему какой-либо символ, например одинарную кавыч­ку, то данная учетная запись окажется заблокированной, а соответствующий пользователь более не сможет войти в систему. Это достаточно старый прием, и в настоящее время его практически не используют. Современные систе­мы для подключения пользователей к системе используют механизм /etc/shadow (о нем чуть позже), который предусматривает более правильные способы блоки­рования учетной записи без изменения пароля.

В третьем поле указывается идентификатор пользователя.

Четвертое поле содержит идентификатор группы (Group ID, GID). Группа, указанная в этом поле, называется первичной группой пользователя (primary group).

Пятое поле теперь называют полем комментариев, но первоначальное его на­звание — GECOS, от «GE Consolidated Operating System». При запросе информа­ции о пользователе через finger или иную программу содержимое данного поля теперь возвращается как истинное имя пользователя. Поле комментариев может быть пустым.

Шестое поле задает домашний каталог пользователя.

Седьмое и последнее поле задает командную оболочку входа в систему. Не вся­кую оболочку можно указать в этом поле. В зависимости от настроек системы в нем может быть указана только оболочка из списка допустимых оболочек.

Рисунок 4.35 – Пример файла /etc/passwd (при использовании теневых паролей)

Пример полей записи из файла /etc/passwd:

Stud1:Fixx2XB23eaBs:505:100:Student 1:/home/stud1:/bin/bash

_____ ____________ ___ ___ _______ __________ _______

Вх.имя Контр.сумма Ид-р Ид-р Имя Нач.каталог Ком.оболочка

пароля п-ля гр. п-ля

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

Владельцем файла /etc/shadow является пользователь root и только он имеет пра­во читать этот файл. Для его создания нужно взять имена пользователей и хэшированные пароли из файла passwd и поместить их в файл shadow, заменив при этом все хэшированные пароли в файле passwd символами х.

Файл теневых паролей во многих отношениях схож с файлом обычных паро­лей. Назначение первого и второго полей файла shadow такое же, как и у первого поля файла passwd.

С третьего поля начинается информация об устаревании пароля. В нем хранит­ся число дней, прошедших с 1 января 1970 года до дня последнего изменения паро­ля.

Четвертое поле задает минимальное число дней, которые должны пройти, прежде чем можно будет вновь изменять пароль. Пока со дня последнего измене­ния пароля не пройдет столько дней, сколько указанно в этом поле, вновь изме­нять пароль нельзя.

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

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

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

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

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

Некоторые входные имена, описанные в первой записи каждой строки файла паролей, являют­ся зарезервированными системными именами UNIX и непосредственно связаны со строением систе­мы безопасности.

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

Root

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

daemon или sys

управление некоторыми сетевыми процессами, в некоторых реализациях от­вечает также за другие системные сервисы;

guest

используется для посетителей, не имеющих собственных учетных записей;

ftp

используется для анонимного доступа к системе по протоколу передачи фай­лов FTP;

uucp

управление системой UUCP-сервиса, отвечающего за передачу почты;

news

используется системой новостей Usenet;

nobody

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

Перечисленные системные учетные записи не имеют реальных имен пользователей в соответ­ствующих полях файла учетных записей. Знак "*" в поле, хранящем контрольную сумму пароля для учетной записи, предотвращает возможность подключения пользователей к UNIX под подобными системными именами.

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

Группы в UNIX предназначены для организации равноправного доступа части пользователей системы к каким-либо общим файлам или устройствам и облегчения администрирования. Путем по­мещения пользователя в соответствующую группу можно дополнить или ограничить его полномочия над какими-нибудь системными ресурсами.

Как и в случае с отдельными пользователями, любая группа имеет имя и идентификационный номер (GID). Групповой идентификатор - целое шестнадцатибитное число. Каждый пользователь входит в первичную группу, идентификационный номер которой указан в файле /etc/passwd для каж­дой учетной записи.

Данные по всем группам пользователей в системе, соответствующие им групповые идентифи­каторы и данные о принадлежности пользователей к той или иной группе содержатся в файле описа­ния групп /etc/group.

Файл /etc/groups по своей природе похож на файл паролей.

Каждая запись файла /etc/group состоит из четырех полей, разделенных двое­точиями. Первое поле задает имя группы. Подобно имени пользователя, оно облегчает жизнь системных администраторов (символьные имена запоминаются куда легче числовых идентификаторов).

Второе поле обычно всегда пустое, так как механизм паролей для групп обычно не используется, однако если данное поле не пусто и содержит пароль, то к группе может присоединиться любой пользователь. Для этого нужно выполнить коман­ду newgrp с именем группы в качестве параметра, после чего ввести правильный пароль. Если пароль для группы не задан, то присоединиться к ней могут только пользователи, перечисленные в списке членов группы.

Третье поле задает идентификатор группы (Group ID, GID). Смысл его такой же, как и у идентификатора пользователя. Удобней, когда он уникальный, хотя это и необязательно.

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

Пользователи UNIX являются членами групп, описанных в /etc/group в дополнение к первичной группе, указанной в /etc/passwd. Описание соответствия группового идентификатора GID и имени пользователя в /etc/group сделано для удобства пользователей и администратора.

Пользователи могут одновременно являться членами нескольких различных групп.

Рисунок 4.36 – Принадлежность пользователя группам

Во многих системах UNIX группа с нулевым идентификатором имеет специальное значение и обычно называется wheel. Только входящие в группу wheel пользователи могут получить права сис­темного администратора. Такое дополнительное условие положительно сказывается на защищенно­сти системы безопасности от попыток несанкционированного получения полномочий суперпользова­теля зарегистрированными пользователями системы.

Существует принципиальная разница в работе с группами в основных ветвях реализаций ОС UNIX.

В более ранних, чем System V Release 4, реализациях UNIX фирмы AT&T, пользователь в каждый момент времени мог принадлежать только одной из групп системы. Для изменения своей текущей группы было необходимо воспользоваться командой newgrp.

В BSD UNIX и System V Release 4 были введены расширенные возможности управления груп­пами пользователей. В таких системах пользователь может одновременно являться членом разных групп.

В процессе подключения любого пользователя к системе, просматривается база групп в файле /etc/group и определяется первичная группа из файла учетных записей /etc/passwd. При проверке прав доступа пользователя к каким-либо ресурсам системы проверяются права доступа для всех групп, в которые входит пользователь.

Механизм групп позволяет выбрать одну из двух различных схем: группа по умолчанию и частные группы пользователей.

По команде newgrp пользователь становится членом указанной в команде группы, при этом данная группа становился для данного пользователя группой входа в систему (login group). При этом пользователь продол­жает оставаться членом тех групп, в которые он входил до выполнения команды newgrp. Группа входа в систему является группой, которая (если атрибуты ката­лога не предписывают ничего другого) становится групповым владельцем фай­лов, создаваемых пользователем. Если требуется, чтобы пользователи могли присоединяться и покидать груп­пу без вмешательства системного администратора, то этой группе можно назна­чить пароль.

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

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

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

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

С точки зрения системы безопасности, файлы /etc/passwd и /etc/group являются одними из важнейших в ОС UNIX. Если злоумышленник получит возможность изменить содержимое /etc/passwd, то он сможет легко получить права суперпользователя, либо изменив содержимое контрольной сум­мы поля пароля системного администратора, чтобы войти под его учетной записью с паролем, кон­трольная сумма которого записана, либо изменив значение своего пользовательского идентификато­ра на нулевое и тем самым указав свою учетную запись как учетную запись суперпользователя.

Если злоумышленник получит возможность изменить содержимое файла /etc/group, то он смо­жет добавить себя в любую группу. Путем добавления себя в соответствующую группу, злоумышлен­ник сможет получить доступ к файлу /etc/passwd и затем получить права суперпользователя.

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

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

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

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

Для временного изменения действительного значения UID и изменения текущей учетной записи пользователя, можно воспользоваться утилитой /bin/su. Эта утилита запрашивает входное имя и па­роль требуемой учетной записи, проверяет их и запускает новую командную оболочку с действитель­ным пользовательским идентификатором требуемого пользователя. После завершения работы с осо­быми правами доступа пользователь должен вернуться к старой оболочке со старым значением дей­ствительного UID при помощи команд exit, bye или logout.

Вызов команды su без аргументов равносилен ее вызову с аргументом root. Наличие дефиса между su и именем пользователя говорит команде, что смена пользователя должна осуществляться по полной программе, , то есть со сменой пользователь­ского окружения. Без указания дефиса в результате выполнения su пользователь станет дру­гим пользователем, но окружение останется его изначальным. В частности, значение переменной PATH останется прежним и не будет заменено на значение PATH пользователя, которым он стал.

Наиболее правильным считается использование команды sudo. Данная команда позволяет избранным пользователям выполнять некоторые программы на правах суперпользователя, причем у обратившегося к этой команде пользователя запра­шивается не пароль суперпользователя, а его собственный пароль. Используется sudo подобно команде su. Пользователь вводит sudo команда_для_выполнения, за­тем свой пароль, и если ему это разрешено, указанная команда выполняется в кон­тексте привилегий суперпользователя.

Множество системных утилит UNIX требуют своего выполнения с наивысшими правами супер­пользователя, поскольку работают с важнейшими ресурсами операционной системы. Иногда необхо­димо обеспечить возможность запуска одной из подобных утилит помощнику системного админист­ратора или простому пользователю. При этом не всегда разумно давать пользователю полный доступ ко всей системе с такими правами и раскрывать ему пароль суперпользователя.

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

ОС UNIX контролирует права доступа процесса исходя из эффективных значений идентифика­торов. При выполнении задач с атрибутами переопределения эффективных идентификаторов уста­навливается эффективное значение пользовательского или группового идентификатора процесса, равное значению UID или GID владельца программы. Процессы с атрибутами переопределения эф­фективных пользовательских или групповых идентификаторов называют setuid- или SUID-процессами и setgid- или SGID-процессами. При этом, действительные значения идентификаторов остаются рав­ными значению идентификатора пользователя, запустившего данный процесс и позволяют при необ­ходимости различать статус пользователя процесса.