В чем смысл и разница между субъектом, пользователем и принципалом?

173

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

Итак, что именно означают эти термины, и почему необходимы эти различия субъекта и принципала ?

военно-картографическая служба
источник

Ответы:

277

Они иерархичны в том смысле, что род, вид и особь иерархичны.

  • Субъект - в контексте безопасности субъект - это любой объект, который запрашивает доступ к объекту . Это общие термины, используемые для обозначения объекта, запрашивающего доступ, и объекта, против которого сделан запрос. Когда вы входите в приложение, вы являетесь субъектом, а приложение - объектом. Когда кто-то стучит в вашу дверь, посетитель является субъектом, запрашивающим доступ, а ваш дом - объектом запроса.
  • Принципал - Подмножество субъекта , которое представлено учетной записью, ролью или другим уникальным идентификатором. Когда мы дойдем до уровня детализации реализации, принципалы - это уникальные ключи, которые мы используем в списках контроля доступа. Они могут представлять пользователей, автоматизацию, приложения, соединения и т. Д.
  • Пользователь - Подмножество принципала, обычно ссылающегося на человека-оператора. Различие со временем стирается, потому что слова «пользователь» или «идентификатор пользователя» обычно взаимозаменяемы с «аккаунтом». Однако, когда вам необходимо провести различие между широким классом вещей, которые являются принципалами, и их подмножеством, которые являются интерактивными операторами, управляющими транзакциями недетерминированным образом, «пользователь» - правильное слово.

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

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

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

Как отмечается в комментариях, даже авторитетные источники не согласны с этими условиями. Во время подготовки этого ответа я искал NIST, SANS, IEEE, MITER и несколько «квазиавторизированных» источников, таких как руководства по проверке безопасности. Ни один источник, который я нашел, который был бы, по крайней мере, квази-авторитетным, не охватывал все три термина, и все они значительно различались в их использовании. Это мое мнение о том, как следует использовать термины , но с практической точки зрения, когда вы просматриваете руководство в середине ночи, определения, как правило, соответствуют тому, что говорят продавцы или авторы. Хотелось бы надеяться, что ответы здесь предоставят достаточно информации для навигации по водам и анализа любого защищенного документа с использованием этих терминов.

T.Rob
источник
3
Какая польза от разбивки вещей на Subject, Principal, User, их дополнительную сложность, какую выгоду мы получаем от этой дополнительной сложности?
Ams
19
Возможность правильно выбрать уровень специфики. Это то же преимущество, которое мы получаем от возможности различать пункт назначения от очереди или темы. Возможность выбирать между различными уровнями специфичности в таксономии обеспечивает точность выражения, которая лучше передает намерение автора читателю. При программировании мы имеем такую ​​роскошь / проклятие, что процессор будет интерпретировать наши инструкции только одним способом, и мы вынуждены использовать его уровень точности. Но в человеческом языке нам нужны нюансы и точность, чтобы эффективно передать смысл.
T.Rob
1
Т.Роб, круто, но не могли бы вы уточнить «Пользователь - подмножество принципала»? Если Джон является субъектом, а «учетная запись № 123» является его принципалом, то кто такой пользователь? Есть два Джона? Поскольку род> вид> индивидуум становится все более конкретным, Джон (пользователь) должен быть более конкретным, чем Джон (субъект). Или я что-то упустил?
желто-желтый
1
Рассмотрим два принципала, где # 123 - это Джон, а # 124 - это служебная учетная запись. Вероятно, мы хотим рассматривать эти различия в отношении таких вещей, как политика паролей, возможность входа в систему и т. Д. Принципы типа «пользователь» зависят от сложности пароля и политик истечения срока действия, тогда как принципалы типа «учетная запись службы» могут даже не иметь пароля. Когда мы начинаем классифицировать типы основных, мы создаем подмножества. Это помогает? Или я просто размешал больше грязи?
Т.Роб
Да, это помогает. Итак, конкретно, есть ли исправления к следующему? Возможно, вы захотите скопировать и вставить его в редактор, такой как Notepad ++, и ставить перенос строки перед каждым Джоном (ТАК запрещает разрывы строк в комментариях): John (human) SUBJECT > username_1 PRINCIPAL > password_1 USER John (human) SUBJECT > username_1 PRINCIPAL > password_2 USER John (human) SUBJECT > username_1 PRINCIPAL > smartcard_1 USER John (human) SUBJECT > username_1 PRINCIPAL > cellphone_1 USER
желто-желтый
19

Я думаю, что терминология взята из JAAS .

Когда приложение использует аутентификацию JAAS для аутентификации пользователя (или другого объекта, такого как служба), в результате создается субъект . Целью Субъекта является представление аутентифицированного пользователя. Субъект состоит из набора Принципалов , где каждый Принципал представляет личность для этого пользователя. Например, субъект может иметь имя принципал («Сьюзан Смит») и принципал номера социального страхования («987-65-4321»), тем самым отличая этот субъект от других субъектов.

Аравинд Яррам
источник
2
Я видел это определение раньше, оно слишком плотное, можете ли вы уточнить его, особенно то, как пользователь отличается от принципала, почему используется термин субъект, а не просто пользователь. Если эти термины имеют значение, выходящее за рамки JAAS, я очень хочу ознакомиться с этим значением, если эти термины являются изобретениями JAAS, то, я думаю, инженеры Sun, создавшие его, выбрали плохие имена для того, что означают эти концепции. Я задавал этот вопрос довольно многим программистам и не смог получить четких ответов, каждый, похоже, по-разному понимает эти термины.
Ams
Кажется, что Принципал - только один способ идентифицировать Предмет. Другими словами, любой Принципал может теоретически служить первичным ключом в вашей пользовательской базе данных.
Платиновая Лазурь
3
Лексикон предшествует JAAS в долгосрочной перспективе. JAAS просто использует некоторые из них и иногда нестандартными способами. Часть проблемы, которая вызвала этот вопрос, состоит в том, что концепции извлекаются из контекстов, в которых используется терминология, а затем повторно используются несколько иными способами. Когда авторитетные источники трудно найти или просто игнорировать, значения с течением времени меняются. Когда дело доходит до безопасности, где точность является абсолютным требованием, этот сдвиг в сторону двусмысленности ухудшает нашу способность создавать и реализовывать безопасные конструкции.
T.Rob
@ T.Rob есть какие-нибудь бумажные заголовки или авторитетные ссылки, которыми вы можете поделиться.
Ams
К сожалению, даже авторитетные источники не согласны. SANS вообще не определяет принципала или субъекта bit.ly/hl4rUP, а NIST bit.ly/fE7NJs определяет субъект конкретно как личность. Другие «авторитетные» источники также расплывчаты, что, учитывая важность ясности в этой области, вызывает разочарование. У IEE есть глоссарий, но вы можете читать его только с подпиской или подпиской, поэтому он имеет ограниченное использование в обсуждениях с широкой аудиторией. Я частично основывал свой ответ на Руководстве по экзамену CISSP Шона Харриса.
T.Rob
12

Субъект - это объект, который запрашивает услугу. Это может быть пользователь или процесс. Возможно, именно поэтому имя пользователя было выбрано вместо пользователя.

Когда субъект пытается получить доступ к услуге, субъект должен быть сначала аутентифицирован. Успешная аутентификация заканчивается загрузкой принципалов безопасности для этого субъекта. Например, в системе контроля доступа на основе ролей прошедший проверку (вошедший в систему) пользователь обычно имеет два принципала - userId и roleId. В таких системах привилегии (то есть кто и к чему имеет доступ) указываются как для ролей, так и для пользователей. Во время авторизации (т. Е. Проверки, должна ли быть разрешена запрашиваемая услуга), система безопасности проверит доступность для обоих участников.

Следовательно, с точки зрения авторизации принципалы являются фактическими объектами, доступ к которым разрешен или запрещен. Субъект - это просто пользователь / поток / процесс, который содержит некоторые принципы.

rahulmohan
источник
Какая польза от наличия нескольких принципов на предмет?
Ams
6
Я могу думать о двух преимуществах: (1) Рассмотреть пользователя Алиса с принципалами UserId («Алиса»), Роль («Менеджер»), Отдел («Продажи»), обращающийся к услуге (Объект). Контроль доступа к службе затем можно указать как «Разрешить для роли (менеджер)» или «Запретить для отдела (продажи)» и т. Д. Вместо указания, может ли Алиса получить к нему доступ или нет. С такими системами контроля доступа проще управлять, поскольку администратору безопасности не нужно указывать привилегии доступа для ВСЕХ пользователей для ВСЕХ служб.
rahulmohan
4
(2) В корпоративной системе пользователи обычно должны проходить аутентификацию в нескольких системах, прежде чем можно будет выполнить какую-либо составную услугу. Может случиться, что каждая из этих систем имеет свои собственные механизмы контроля доступа, требующие разных деталей - одна система использует SSN, а другая использует userId. Таким образом, один и тот же субъект должен обладать обоими принципалами, чтобы он мог получить доступ к обоим
rahulmohan
1
У меня возникает ощущение, что 99% путаницы с этой терминологией можно разрешить одним предложением в духе «руководитель - это группа».
Трейказ
1
?! ... почему вы говорите, что Принципал - это Группа?
Рафаэль
10

Как объяснил T.Rob, субъект - это любая сущность, которая запрашивает доступ к объекту. Начиная с этого момента, я нашел комментарий к коду javax.security.auth.Subject, который я нашел ОЧЕНЬ полезным и простым для понимания:

«Субъекты могут потенциально иметь несколько идентификаторов. Каждая идентичность представлена ​​как субъект внутри субъекта. Принципалы просто связывают имена с субъектом. Например, субъект, являющийся человеком, Алиса, может иметь два принципала: один, связывающий» Алиса Бар ", имя в ее водительских правах, для субъекта, а другой, который привязывает," 999-99-9999 ", номер на ее студенческом удостоверении личности, для субъекта. Оба принципала относятся к одному и тому же субъекту, хотя каждый имеет другое имя. "

Надеюсь, поможет.

Рафаэль
источник
7

Это ссылка на приведенное ниже описание из документации Oracle JAVA SE.

Предметы, принципалы, аутентификация и учетные данные Чтобы авторизовать доступ к ресурсам, приложения сначала должны аутентифицировать источник запроса. Структура JAAS определяет термин « субъект» для обозначения источника запроса. Субъектом может быть любая сущность, такая как человек или услуга. Тема представлена классом javax.security.auth.Subject .

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

После проверки подлинности субъект заполняется связанными удостоверениями или принципалами (типа java.security.Principal ). У субъекта может быть много Принципалов. Например, человек может иметь имя Принципал («Джон Доу») и Принципал SSN («123-45-6789»), которые отличают его от других субъектов.

В дополнение к связанным принципалам субъект может иметь атрибуты безопасности, которые называются учетными данными . Учетные данные могут содержать информацию, используемую для аутентификации субъекта новых услуг. Такие учетные данные включают пароли, билеты Kerberos и сертификаты открытых ключей. Учетные данные могут также содержать данные, которые позволяют субъекту выполнять определенные действия. Криптографические ключи, например, представляют учетные данные, которые позволяют субъекту подписывать или шифровать данные. Открытые и частные учетные классы не являются частью основного API J2SE. Следовательно, любой класс может представлять учетные данные.

fgul
источник
Хотя я согласен с ответом Т.Роба, этот от Арама - который говорит, что «субъектом может быть любая сущность» - намекает на ERM: модель сущностей-отношений, лежащая в основе большинства баз данных. В этой модели «сущность» соответствует «субъекту» в контексте безопасности, но в зависимости от того, что вы моделируете, это может быть основной (банковский счет, номер SSN) или пользователь (Джон Смит), как это было предложено в Marinus. ' ответ. Википедия: en.wikipedia.org/wiki/Entity%E2%80%93relationship_model
желто-желтый
0

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

ChinaJavaDeveloper
источник