131
Общая парадигма концепции пользователя подразумевает, что все пользователи ОС
работают автономно и не мешают друг другу, кроме системного администратора.
Это достигается двумя основными мерами:
•каждый пользователь имеет право работать только с теми файлами, директориями и файловыми системами, к которым он имеет доступ;
•пользователь root, с идентификатором UID=0, может делать абсолютно все.
На самом деле, имя пользователя имеет вспомогательное второстепенное значение. Главным показателем пользователя является его идентификатор UID: с увеличением номера UID права пользователя уменьшаются.
Аналогичный критерий справедлив для групп пользователей, права которых определяются идентификатором GID.
Условно, все пользователи разделяются на две категории:
•системные пользователи — root, sysadm и другие администраторы;
•обычные пользователи — те, которые используют прикладное программное
обеспечение ОС и не занимаются администрированием.
Условность такого разделения подтверждается тем фактом, что в первых ОС идентификаторы обычных пользователей начинались с номера 100.
Со временем, разработчики прикладного ПО стали столь интенсивно использовать идентификаторы, что было принято решение:
•системные пользователи — UID < 999;
•пользователь live-дистрибутива — UID=999 и GID=999;
•обычные пользователи — UID > 999.
Замечание
Хотя часто, при создании нового пользователя, обычно создается и группа с таким же именем и GID=UID, - это не является обязательным требованием:
•при создании, новый пользователь может быть сразу включен в любую, уже существующую группу;
•любой пользователь, без ограничений, может быть включен в произвольное число групп.
Как правило, обычному пользователю доступны:
•все файлы и каталоги его домашней директории, положение которой задано системной переменной HOME;
•права записи в каталоги /tmp и /var/tmp;
•права монтирования и демонтирования внешних устройств, которые прописаны в файле /etc/fstab с опцией user.
Временная смена прав доступа на права другого пользователя достигпется командой:
132
su [-] [username]
при этом, ему придется набрать пароль того пользователя, под чьим именем он собирается работать:
•Если присутствует первый аргумент команды su, то произойдет смена домашней директории и выполнятся скрипты входа типа ~/.profile.
•Если второй аргумент не указан, то подразумевается пользователь root.
Выполнене команд от имени пользователя root, для обычного пользователя,
выполняется командой:
sudo список_команд;
при этом, ему придется набрать свой собственный пароль.
Замечание
Если пользователю необходимо уточнить под чьими именами и идентификаторами он работает, можно воспользоваться командами whoami и id.
Смена прав пользователя ОС связана с его действиями в системе.
Действия пользователя в системе определяется работой программ (процессов), которые пользователь запускает. Чтобы определить, с какими правами работает процесс, вводятся дополнительные понятия, связанные с реальными и эффективными идетификаторами пользователя.
Действительные (реальные) ID пользователя и ID группы — это числовые (двухбайтовые) значения UID и GID, записанные в файлах /etc/passwd и /etc/group во время создания пользователя в системе.
Эффективные ID пользователя и ID группы — это числовые (двухбайтовые) значения, которые учитываются в системе при выполнении конкретного процесса:
•дочерний процесс, создаваемый системным вызовом fork(…), получает эффективные ID от своего родителя;
•процесс, модифицируемый одним из системных вызовов exec(…), устанавли-
вает эффективные ID в зависимости от значений битов SUID и SGID, присутствующих в поле i_mode индексного десткриптора файла (см. подраздел 4.5, таблицы 4.9 и 4.10): если биты SUID и SGID - установлены, то эффективные ID берутся из дескриптора файла, а если нет, то устанавливаются в значения
дейтсвительных (реальных) ID пользователя, запустившего процесс.
Сохраненные ID пользователя и ID группы — это числовые (двухбайтовые) значения первоначальных эффективных ID, которые сохранены в памяти процесса с помощью системных вызовов getuid(...) и getgid(...), сразу же после завершения системного вызова exec(...).
Замечание
Установка новых значений эффектиных ID выполняется с помощью системных вы-зовов setuid(...) и setgid(...).
На рисунке 5.1, представлен вывод эффектиных идентификаторов процесса shell,
133 запущенного пользователем upk в окне терминала.
Рисунок 5.1 — Вывод эффективных ID пользователя upk
Любому пользователю, для нормальной работы с ОС, необходимо пройти процедуру регистрации в системе: получить имена, идентификаторы, пароли и место для работы. Указанную процедуру выполняет администратор ОС.
Врезультате регистрации:
•имена, идентификаторы и пароли будут записаны в соответствующие файлы: /etc/passwd, /etc/group, /etc/shadow и /etc/gshadow;
•в директории /home будет создана директория с именем пользователя;
•в директорию /home будут перенесены директории и файлы, находящиеся в
директории /etc/skel, которые составляют начальный скелет рабочей области любого пользователя.
После загрузки ОС и перехода ее в многопользовательский режим, запускается процесс «Манеджер сеанса», который контролирует и обеспечивает процедуры входа пользователя в систему:
•в случае положительного завершения процедры входа в систему, дополни-
тельно контролируется содержимое директории /home/$USER и, случае необходимости, в нее добавляются нужные файлы или модифицируются старые, а также устанавливаются эффективные идентификаторы для процессов санса пользователя;
•в случае негативного завершения процедры входа в систему или негативного
контроля содержимого директории /home/$USER, выполняются дополнительные процедуры, которые заканчиваются перезапуском «Менеджера сеансов».
Замечание
Среда исполнения, о которой говорилось ранее, представляет собой одну систем-ную среду исполнения и пользовательские среды исполнения, по одной на каждый вход в систему.
134
Процедура входа в ОС может быть: текстовой, когда на консоль терминала выводится приглашение login:, или графической, когда выводится некоторое стилизованное окно приглашения.
В любом случае, требуется набрать имя и пароль, а возможно и другие сведения, например, домен или язык работы с системой. Это зависит от настроек «Менеджера сеансов».
После ввода необходимой информации начинается процедура login, которая подразделяется на:
•идентификацию (аутентификацию), подразумевающую совпадение имени и пароля, зарегистрированных в системе;
•авторизацию, подразумевающую создание среды для работы программ поль-
зователя и фиксирование прав, которыми пользователь обладает. Фактически, авторизация не заканчивается завершением процедуры login. Она проводится постоянно, когда пользователь обращается к файлам или взаимодействует с процессами.
Поскольку методы авторизации могут быть различны, а пользователю даже приходится обращаться к программам, требующим смены пользователя, то смена парадигмы обеспечения безопасности работы ОС, приводит к перезаписи большого количества системного ПО.
В 1995 году, OSF (Open Software Foundation) — фонд открытого программного обеспечения - приступил к разработке системы PAM (Pluggable Authentication Modules) — заменяемые модули идентификации.
Замечание
К середине 90-х годов, проблема безопасности ОС стала столь критичной, что поставила под сомнение архитектурные принципы различных систем.
Система PAM разрабатывалась для UNIX-подобных систем. MS Windows имеет свою оригинальную систему защиты.
Система PAM введена для создания дополнительного уровня защиты между приложениями и различными протоколами и способами идентификации и авторизации. Модули PAM — это динамически загружаемые библиотеки, которые находятся в директориях /lib/x86_64-linux-gnu/security или /usr/lib/x86_64-linux-gnu/security.
Все приложения используют универсальный интерфейс, PAM API, а уже модули PAM выбирают стратегию поведения и протоколы согласно файлам конфигурации:
/etc/pam.conf либо /etc/pam.d/....
Замечание
Модульная система PAM не столько обеспечивает новый уровень защиты, сколько разделяет прикладную часть процессов от части, обеспечиващей защиту их функционирования, одновременно централизуя ПО защиты, обеспечивая мобильность его модификации и ускоряя внедрение новых технологий.
Технологическая концепция модулей PAM предполагает разделение их на четыре типа:
|
135 |
auth |
Выполняют аутентификацию, то есть подтверждают, что пользователь |
|
является именно тем, кем он представился в системе. |
account |
Разрешают или запрещают конкретному пользователю вход в систему. |
|
Это решение может зависеть от даты, времени суток, системных |
|
ресурсов и т.д. |
session |
Осуществляют действия, которые должны быть выполнены до или |
|
после входа пользователя: занесение информации в журнальные |
|
файлы, монтирование устройств и т.д. |
passwd |
Изменяют пароль пользователя. |
Практическая реализация этой концепции предполагает централизованное исполь-зование файлов конфигурации.
Сейчас, файлы конфигурации Linux-PAM находятся в директории /etc/pam.d, в которой находятся файлы, как правило совпадающие с именами файлов приложений. Например, для программы sudo, файл конфигурации: /etc/pam.d/sudo.
Каждый файл конфигурации состоит из отдельных строк, содержащих поля:
тип_модуля |
управляющий_флаг имя_модуля |
аргументы |
|||
тип_модуля |
Один из четырех типов: auth, account, session, passwd. |
||||
управляющий_флаг |
Флаг, контролирующий поведение PAM в случае успеш- |
||||
|
ного или безуспешного результата работы модуля: |
||||
|
• |
required - успешное завершение работы модуля |
|||
|
|
необходимо для успеха всего запроса. Об |
|||
|
|
ошибочном завершении не будет сообщено до |
|||
|
|
окончания работы всех модулей. |
|
|
|
|
• |
requisite — успешное завершение работы модуля |
|||
|
|
необходимо для успеха всего запроса. Ошибочное |
|||
|
|
завершение приводит к немедленному возврату |
|||
|
|
управления приложению. |
|
|
|
|
• sufficient — в случае |
успешного |
завершения, |
||
|
|
управление немедленно |
передается |
приложению. |
|
|
|
Ошибочное завершение модуля не учитывается. |
|||
|
• optional — результат работы |
этого модуля не |
|||
|
|
учитывается. |
|
|
|
имя_модуля |
Имя файла, которое должно быть указано с полным путем |
||||
|
к нему. |
|
|
|
|
аргументы |
Командная строка, передаваемая модулю. |
|
|||
Таким образом, система PAM позволяет разрабатывать систему безопасности без переделки самих приложений.
Замечание
Чтобы узнать, какие библиотеки PAM использует приложение, лучше воспользоваться командой ldd. Например, для приложения su, имеем: