|
@@ -1,100 +0,0 @@
|
|
|
-# Защита входа в систему (идентификация и аутентификация пользователей)
|
|
|
-
|
|
|
- Подключаемые модули аутентификации (pluggable authentication modules, PAM) являются основной системой аутентификации в ОС семейства Unix, в т.ч. GNU/Linux. PAM пришел на смену встраиваемым механизмам аутентификации в различных приложениях (например, ранее в login была встроена собственная процедура аутентификации, проверяющая введенный пароль с паролем из /etc/passwd или хешем из /etc/shadow).
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-## CentOS 7
|
|
|
- Если брать для примера одну из ОС семейства unix - CentOS 7, то она включает в себя управлениe идентификацией (Identity Management, IdM) — набор функций, предоставляющих централизованный и простой способ управления идентификаторами пользователей, машин и сервисов в больших Linux/Unix корпоративных инсталляциях. IdM предоставляет способ определения политик безопасности доступа для управления этими идентификаторами.
|
|
|
-
|
|
|
- Основа управления идентификацией была разработана в рамках открытого проекта FreeIPA, объединяющего стандартные сетевые сервисы общего назначения в единую систему управления: PAM, LDAP, Kerberos, DNS, NTP и сервисами сертификации. Это позволяет системам на CentOS работать в качестве контроллеров доменов в среде Linux. Из-за того, что функция управления идентификацией встроена в CentOS – достаточно просто добавить управление политиками и идентификацией в ваш рабочий процесс.
|
|
|
-
|
|
|
- Для многих организаций, Active Directory (AD) – центр управления идентификационными данными пользователей внутри предприятия. Все системы, к которым могут получать доступ пользователи AD, должны уметь работать с AD для выполнения аутентификации и проверки идентификационных данных.
|
|
|
-
|
|
|
--- Прямая интеграция
|
|
|
-
|
|
|
- Linux системы могут быть соединены с Active Directory напрямую с помощью компонента System Security Services Daemon (SSSD). Компонент выступает в качестве шлюза аутентификации и проверки идентификационных данных в центральное хранилище идентификаций.
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
--- Непрямая интеграция
|
|
|
- Прямая интеграция ограничена использованием только аутентификации и идентификационных данных, относящихся к пользователям. Система не получает политики и данные, контролирующие доступ в корпоративных окружениях. Системы Linux могут получать политики (например на sudo), правила контроля доступа хоста, automount, netgroups, SELinux и другие возможности из центрального сервера идентификации. Сервер управления идентификацией обеспечивает централизованное управление системами Linux, давая им идентификаторы, права и предоставляя централизованно управляемые политики для Linux, перечисленные выше. В большинстве корпоративных окружений, пользователи Active Directory должны иметь доступ и к Linux ресурсам. Это может быть достигнуто с помощью установки доверенных отношений между серверами IdM и AD. Диаграмма ниже показывает как пользователи из леса Active Directory получают доступ к системам Linux, входя в домен IdM.
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-## Идентификация и аутентификация пользователей при работе подсистемы разграничения доступа в ОС Linux
|
|
|
-
|
|
|
- При построении подсистемы разграничения доступа в Linux важным этапом в процессе загрузки ОС является этап после загрузки системы по завершению процесса init при запуске системной утилиты login - т. е. этап непосредственно и/а пользователя в ОС. При этом саму подсистему разграничения доступа удобно строить на базе загружаемого модуля ядра Linux, этот модуль должен загружаться в ядро ОС на одном из последних этапов работы init, но до монтирования корневой файловой системы на запись.
|
|
|
- После завершения работы процесса init модуль ядра будет находиться в состоянии ожидания каких-либо внешних воздействий (например, вызова какого-либо системного вызова и/или обращение к модулю из usermode-утилит) - при этом для правильной регистрации пользователя необходимо аутентифицировать его в т.ч. в модуле ядра (чтобы в нужный момент модуль ядра мог знать совершал ли вход в систему тот или иной пользователь и можно ли выполнять какие-либо процессы в ОС с его правами).
|
|
|
- Для этого необходимо создать PAM-модуль аутентификации, а логика работы процедуры и/а должна стать следующей:
|
|
|
-
|
|
|
-- запускается утилита login
|
|
|
-
|
|
|
-- утилита login делегирует функции и/а внешнему PAM-модулю, при этом:
|
|
|
-
|
|
|
- конкретный PAM-модуль предварительно должен быть прописан в соответствующем конфигурационном файле (как правило /etc/pam.d/common_auth или /etc/pam.d/login в зависимости от ОС, PAM-модуль обычно должен прописываться вместо штатного модуля pam_unix.so);
|
|
|
-
|
|
|
- PAM-модуль предварительно должен быть записан в каталог к другим PAM-модулям(/etc/security/).
|
|
|
-
|
|
|
-- PAM-модуль запрашивает у пользователя login (или аппаратный идентификатор) и пароль;
|
|
|
-
|
|
|
-- PAM-модуль рассчитывает хеш от предъявленных пользователем значений login (аппаратного идентификатора) и пароля и передает его модулю ядра по протоколу взаимодействия usermode-приложений с ядром ОС (протокол netlink);
|
|
|
-
|
|
|
-- Модуль ядра ищет в своих структурах пользователя по login (аппаратному идентификатору) и сравнивает полученное от PAM значение хеша со значением в своей БД, при этом:
|
|
|
-
|
|
|
- Если хеш совпадает - PAM-модулю по netlink от модуля ядра должно возвращаться имя пользователя, которому соответствует хеш в БД пользователей. Данного пользователя PAM-модуль пропускает и запускает его shell;
|
|
|
- Если хеш не совпадает - PAM-модулю по netlink от модуля ядра возвращается указание вывести ошибку (код ошибки) и не аутентифицировать пользователя в системе (не запускать его сессию и shell в рамках этой сессии);
|
|
|
- В любом из описанных случаях в модуле ядра в соответствующие структуры должны заноситься данные о:
|
|
|
-состоянии аутентифицированности в данный момент определенного пользователя
|
|
|
-событиях во время процедуры и/а (успешная/неудачная попытка и/а и т.п..)
|
|
|
-
|
|
|
-
|
|
|
- Также необходимо понимать, что наиболее важным элементов всей подсистемы разграничения доступа является наличие аппаратного компонента, с помощью которого на ранних этапах загрузки будет осуществляться:
|
|
|
-
|
|
|
- контроль целостности важных объектов, используемых в дальнейшем подсистемой разграничения доступа (модуль ядра, БД пользователей, PAM-модули и прочие утилиты, взаимодействующие в модулем ядра);
|
|
|
-
|
|
|
- контроль целостности файлов, в которых прописывается порядок загрузки ОС и вставлена загрузка модуля ядра до монтирования корневой файловой системы на запись (например, /boot/initrd, порядок загрузки записывается в initrd в файл init);
|
|
|
-
|
|
|
- контроль целостности ядра ОС (например, /boot/vmlinux);
|
|
|
-
|
|
|
- контроль целостности настроек загрузчика (например, /boot/grub/grub.cfg) и самого загрузчика, записанного в загрузочный сектор раздела.
|
|
|
-
|
|
|
- Без таких контрольных процедур при использовании существующих штатных средств защиты в ОС всегда существует возможность обхода или отключения этих средств защиты на ранних этапах загрузки, что нивелирует любые механизмы защиты, реализуемые с помощью подсистемы разграничения доступа в ОС, т. к. появляется возможность данную подсистему просто отключить.
|
|
|
-
|
|
|
-## Регистрация в системе
|
|
|
-
|
|
|
- В правильно установленной операционной системе Linux должна существовать как минимум одна учётная запись для обычного пользователя. Во всех дальнейших примерах у нас будет участвовать Мефодий Кашин, владелец учётной записи "methody" в системе "Some Linux". Вы можете пользоваться для выполнения примеров любой учётной записью, которая создана в Вашей системе (естественно, кроме root).
|
|
|
-
|
|
|
-` Welcome to Some Linux / tty1
|
|
|
-localhost login: bebra
|
|
|
-
|
|
|
-Password:
|
|
|
-Login incorrect
|
|
|
-
|
|
|
-login: `
|
|
|
-
|
|
|
-В ответ на это система запрашивает пароль
|
|
|
-
|
|
|
-` login: bebra
|
|
|
-Password:
|
|
|
-[bebra@localhost bebra]$ `
|
|
|
-
|
|
|
- В этот раз регистрация прошла успешно, о чём свидетельствует последняя строка примера - приглашение командной строки. Приглашение -- это подсказка, выводимая командной оболочкой и свидетельствующая о том, что система готова принимать команды пользователя. Приглашение может быть оформлено по-разному, более того, пользователь может сам управлять видом приглашения, но почти наверняка в приглашении содержатся входное имя и имя хоста -- в нашем примере это "bebra" и "localhost" соответственно. Заканчивается приглашение чаще всего символом "$".
|
|
|
-
|
|
|
-## Идентификация
|
|
|
-
|
|
|
- Когда система выводит на экран приглашение командной строки после того, как правильно введены имя пользователя и пароль, это означает, что произошла идентификация пользователя (authentication, "проверка подлинности"). Пароль может показаться излишней сложностью, но у системы нет другого способа удостовериться, что за монитором находится именно тот человек, который имеет право на использование данной учётной записи.
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-## Литература
|
|
|
-[okbsapr](https://www.okbsapr.ru/library/publications/kanner_2012_3/)
|
|
|
-[Хабр](https://habr.com/ru/company/infobox/blog/230781/)
|
|
|
-[studref](https://studref.com/334328/informatika/identifikatsiya_autentifikatsiya)
|
|
|
-
|
|
|
-## Вопросы
|
|
|
-1. [Что такое аутентификация] ** Это процедура проверки подлинности, док-ва что пользователь именно тот, за кого себя выдает**
|
|
|
-2. [Что такое Авторизация] ** Процедура предоставления субъекту определенных прав доступа к ресурсам системы после прохождения им процедуры аутентификации. **
|
|
|
-3. [Что такое PAM модуль] ** основная система аутентификации в ОС семейства Unix**
|
|
|
-4. [Что такое идентификатор пользователя] **Уникальное число, однозначно идентифицирующее учётную запись пользователя в Linux**
|
|
|
-5. [Что такое входное имя и имя хоста] **доменное имя, назначенное хост-компьютеру; имя, используемое при создании учетной записи**
|