Службы авторизации C ссылка
Authorization Services является API, упрощающий управление доступом в ограниченные области операционной системы и позволяющий Вам ограничивать доступ пользователя к определенным функциям в Вашем приложении Mac. Authorization Services используется в
программное обеспечение, ограничивающее доступ к его собственным инструментам
приложения та система вызова инструменты
установщики программного обеспечения, устанавливающие привилегированные инструменты или требующие доступа к ограниченным областям операционной системы
Сопутствующий объем к Ссылке Authorization Services C Выполняет Привилегированные Операции С Authorization Services, объясняющей понятия позади авторизации и обеспечивающей примеры того, как использовать Authorization Services. Методы Objective C, которые эквивалентны нескольким из функций в этом документе, описаны в Ссылке Objective C Authorization Services.
Authorization Services доступна в OS X v10.0 и позже как часть Концепции безопасности.
-
Создает новую ссылку авторизации и предоставляет возможность авторизовывать или предварительно авторизовывать права.
Объявление
Swift
func AuthorizationCreate(_
rights
: UnsafePointer<AuthorizationRights>, _environment
: UnsafePointer<AuthorizationEnvironment>, _flags
: AuthorizationFlags, _authorization
: UnsafeMutablePointer<AuthorizationRef>) -> OSStatusObjective C
OSStatus AuthorizationCreate ( const AuthorizationRights *rights, const AuthorizationEnvironment *environment, AuthorizationFlags flags, AuthorizationRef *authorization );
Параметры
rights
Указатель на ряд прав авторизации Вы создаете. Передача
NULL
если приложение не требует никаких прав в это время.environment
AuthorizationItemSet
структура, используемая при авторизации или предварительной авторизации прав.Не используемый в OS X v10.2 и ранее.
В OS X v10.3 и позже, можно передать значок или запросить данные использоваться в поле диалога аутентификации.
В OS X v10.4 и позже, можно также передать имя пользователя и пароль для авторизации пользователя без взаимодействия с пользователем. Возможные значения для этого параметра перечислены в
Security.framework/Headers/AuthorizationTags.h
.Данные, переданные в этом параметре, не хранятся в ссылке авторизации; это используется только во время авторизации. Если Вы не передаете данных в этом параметре, передаете константу
kAuthorizationEmptyEnvironment
.Для списка возможных ключей в наборе авторизации посмотрите Бейджи. Для самой структуры данных посмотрите
AuthorizationItemSet
.flags
Немного маски для указания опций авторизации. Используйте следующие наборы опции.
Передайте константу
kAuthorizationFlagDefaults
если никакие опции не необходимы.Укажите
kAuthorizationFlagExtendRights
маска для запроса прав. Можно также указатьkAuthorizationFlagInteractionAllowed
маска для разрешения взаимодействия с пользователем.Укажите
kAuthorizationFlagPartialRights
иkAuthorizationFlagExtendRights
маски для запроса частичных прав. Можно также указатьkAuthorizationFlagInteractionAllowed
маска для разрешения взаимодействия с пользователем.Укажите
kAuthorizationFlagPreAuthorize
иkAuthorizationFlagExtendRights
маски, чтобы предварительно авторизовать права.Укажите
kAuthorizationFlagDestroyRights
маска, чтобы препятствовать тому, чтобы Сервер безопасности сохранил права, полученные во время этого вызова.
authorization
Указатель на ссылку авторизации. По возврату этот параметр относится к сеансу авторизации, который создает Сервер безопасности. Передача
NULL
если Вы требуете функционального результата, но никакой ссылки авторизации.Возвращаемое значение
Код результата. Посмотрите Коды Результата Authorization Services.
Обсуждение
Основная цель этой функции состоит в том, чтобы создать непрозрачную ссылочную структуру авторизации, связанную со ссылкой авторизации. Вы используете ссылку авторизации в других функциях авторизации.
Можно использовать эту функцию для авторизации всех или частичных прав. Авторизация прав с этой функцией является самой полезной для приложений, требующих однократной авторизации. Путем передачи
NULL
кauthorization
параметр, Сервер безопасности пытается авторизовать требуемые права и возвращает надлежащий код результата, фактически не предоставляя права. Если Вы не собираетесь вызывать какие-либо другие функции авторизации, используйте этот метод, чтобы определить, есть ли у пользователя авторизация, не предоставляя прав.Можно также использовать эту функцию, чтобы предварительно авторизовать права путем указания
kAuthorizationFlagPreAuthorize
маска. Когда право имеет нулевой тайм-аут, предварительная авторизация является самой полезной. Например, можно предварительно авторизовать в приложении и если оно успешно выполняется, вызовите инструмент помощника и запросите авторизацию. Если пользователь не может позже авторизовать указанные права, это устраняет вызов инструмента помощника.Если Вы не указываете
kAuthorizationFlagPartialRights
маска и Сервер безопасности отклоняют по крайней мере одно право, тогда состояние этой функции по возвратуerrAuthorizationDenied
.Если Вы не указываете
kAuthorizationFlagInteractionAllowed
маска и Сервер безопасности требуют взаимодействия с пользователем, тогда состояние этой функции по возвратуerrAuthorizationInteractionNotAllowed
.Если Вы указываете
kAuthorizationFlagInteractionAllowed
маска и пользователь отменяют процесс аутентификации, тогда состояние этой функции по возвратуerrAuthorizationCanceled
.Когда для Вашего приложения больше не будет нужна ссылка авторизации, используйте функцию
AuthorizationFree
освободить память связалось с ним.Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.0 и позже.
-
Освобождает память, связанную со ссылкой авторизации.
Объявление
Swift
func AuthorizationFree(_
authorization
: AuthorizationRef, _flags
: AuthorizationFlags) -> OSStatusObjective C
OSStatus AuthorizationFree ( AuthorizationRef authorization, AuthorizationFlags flags );
Параметры
authorization
Ссылка авторизации на свободный.
flags
Немного маски. В большинстве случаев передайте константу
kAuthorizationFlagDefaults
. Для удаления всех совместно используемых и несовместно используемых полномочий передайте константуkAuthorizationFlagDestroyRights
.Возвращаемое значение
Код результата. Посмотрите Коды Результата Authorization Services.
Обсуждение
Вызовите эту функцию, когда для Вашего приложения больше не нужна ссылка авторизации, Вы создали использование функции
AuthorizationCreate
.Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.0 и позже.
-
Авторизовывает и предварительно авторизовывает права.
Объявление
Swift
func AuthorizationCopyRights(_
authorization
: AuthorizationRef, _rights
: UnsafePointer<AuthorizationRights>, _environment
: UnsafePointer<AuthorizationEnvironment>, _flags
: AuthorizationFlags, _authorizedRights
: UnsafeMutablePointer<UnsafeMutablePointer<AuthorizationRights>>) -> OSStatusObjective C
OSStatus AuthorizationCopyRights ( AuthorizationRef authorization, const AuthorizationRights *rights, const AuthorizationEnvironment *environment, AuthorizationFlags flags, AuthorizationRights **authorizedRights );
Параметры
authorization
Ссылка авторизации, относящаяся к сеансу авторизации.
rights
Указатель на ряд прав авторизации Вы создаете. Передача
NULL
если приложение не требует никаких прав в это время.environment
Данные, используемые при авторизации или предварительной авторизации прав. Не используемый в OS X v10.2 и ранее. В OS X v10.3 и позже, можно передать значок или запросить данные использоваться в поле диалога аутентификации. В OS X v10.4 и позже, можно также передать имя пользователя и пароль для авторизации пользователя, не выводя на экран поле диалога аутентификации. Возможные значения для этого параметра перечислены в
Security.framework/Headers/AuthorizationTags.h
. Данные, переданные в этом параметре, не хранятся в ссылке авторизации; это используется только во время авторизации. Если Вы не передаете данных в этом параметре, передаете константуkAuthorizationEmptyEnvironment
.flags
Немного маски для указания опций авторизации. Используйте следующие наборы опции.
Передайте константу
kAuthorizationFlagDefaults
если никакие опции не необходимы.Укажите
kAuthorizationFlagExtendRights
маска для запроса прав. Можно также указатьkAuthorizationFlagInteractionAllowed
маска для разрешения взаимодействия с пользователем.Укажите
kAuthorizationFlagPartialRights
иkAuthorizationFlagExtendRights
маски для запроса частичных прав. Можно также указатьkAuthorizationFlagInteractionAllowed
маска для разрешения взаимодействия с пользователем.Укажите
kAuthorizationFlagPreAuthorize
иkAuthorizationFlagExtendRights
маски, чтобы предварительно авторизовать права.Укажите
kAuthorizationFlagDestroyRights
маска, чтобы препятствовать тому, чтобы Сервер безопасности сохранил права, полученные во время этого вызова.
authorizedRights
Указатель на недавно выделенный
AuthorizationRights
структура. По возврату эта структура содержит права, предоставленные Концепцией безопасности. Если Вы не запрашиваете эту информацию, передачуNULL
. Если Вы указываетеkAuthorizationFlagPreAuthorize
маска вflags
параметр, метод возвращает все требуемые права, включая не предоставленных, но флаги прав, которые не могли быть предварительно авторизованы, включаютkAuthorizationFlagCanNotPreAuthorize
бит.Освободите память, связанную с этим набором путем вызывания функции
AuthorizationFreeItemSet
.Возвращаемое значение
Код результата. Посмотрите Коды Результата Authorization Services.
Обсуждение
Существует три главных причины использовать эту функцию. Первая причина состоит в том, чтобы предварительно авторизовать права путем указания
kAuthorizationFlagPreAuthorize
,kAuthorizationFlagInteractionAllowed
, иkAuthorizationFlagExtendRights
маски как опции авторизации. Когда право имеет нулевой тайм-аут, предварительная авторизация является самой полезной. Например, можно предварительно авторизовать в приложении и если оно успешно выполняется, вызовите инструмент помощника и запросите авторизацию. Если Сервер безопасности не может позже авторизовать указанные права, это устраняет вызов инструмента помощника.Вторая причина использовать эту функцию состоит в том, чтобы авторизовать права прежде, чем выполнить привилегированную работу путем указания
kAuthorizationFlagInteractionAllowed
, иkAuthorizationFlagExtendRights
маски как опции авторизации.Третья причина использовать эту функцию состоит в том, чтобы авторизовать частичные права. Путем указания
kAuthorizationFlagPartialRights
,kAuthorizationFlagInteractionAllowed
, иkAuthorizationFlagExtendRights
маски как опции авторизации, Сервер безопасности предоставляет все права, которые он может авторизовать. По возврату авторизованный набор содержит все права.Если Вы не указываете
kAuthorizationFlagPartialRights
маска и Сервер безопасности отклоняют по крайней мере одно право, тогда состояние этой функции по возвратуerrAuthorizationDenied
.Если Вы не указываете
kAuthorizationFlagInteractionAllowed
маска и Сервер безопасности требуют взаимодействия с пользователем, тогда состояние этой функции по возвратуerrAuthorizationInteractionNotAllowed
.Если Вы указываете
kAuthorizationFlagInteractionAllowed
маска и пользователь отменяют процесс аутентификации, тогда состояние этой функции по возвратуerrAuthorizationCanceled
.Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.0 и позже.
-
Получает данные боковой полосы, такие как имя пользователя и другая информация, собранная во время оценки авторизации.
Объявление
Swift
func AuthorizationCopyInfo(_
authorization
: AuthorizationRef, _tag
: AuthorizationString, _info
: UnsafeMutablePointer<UnsafeMutablePointer<AuthorizationItemSet>>) -> OSStatusObjective C
OSStatus AuthorizationCopyInfo ( AuthorizationRef authorization, AuthorizationString tag, AuthorizationItemSet **info );
Параметры
authorization
Ссылка авторизации, относящаяся к сеансу авторизации.
tag
Строка авторизации, указывающая тип данных Сервер безопасности, должна возвратиться. Передача
NULL
получать всю доступную информацию.info
Указатель на авторизацию установил Сервер безопасности, создает. По возврату этот набор содержит данные авторизации боковой полосы. Когда этот набор больше не будет необходим, освободите память, связанную с ним путем вызывания функции
AuthorizationFreeItemSet
.Возвращаемое значение
Код результата. Посмотрите Коды Результата Authorization Services.
Обсуждение
Плагин авторизации может сохранить результаты операции аутентификации путем вызова
SetContextValue
функция. Можно использоватьAuthorizationCopyInfo
функция для получения этой информации.Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.0 и позже.
-
Освобождает память, связанную с набором авторизации.
Объявление
Swift
func AuthorizationFreeItemSet(_
set
: UnsafeMutablePointer<AuthorizationItemSet>) -> OSStatusObjective C
OSStatus AuthorizationFreeItemSet ( AuthorizationItemSet *set );
Параметры
set
Указатель на набор авторизации к свободному.
Возвращаемое значение
Код результата. Посмотрите Коды Результата Authorization Services.
Обсуждение
Когда для Вашего приложения больше не нужны наборы элемента авторизации, создаваемые Сервером безопасности в функциях AuthorizationCopyRights и AuthorizationCopyInfo, необходимо вызвать эту функцию для освобождения его.
Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.0 и позже.
-
Создает внешнее представление ссылки авторизации.
Объявление
Swift
func AuthorizationMakeExternalForm(_
authorization
: AuthorizationRef, _extForm
: UnsafeMutablePointer<AuthorizationExternalForm>) -> OSStatusObjective C
OSStatus AuthorizationMakeExternalForm ( AuthorizationRef authorization, AuthorizationExternalForm *extForm );
Параметры
authorization
Ссылка авторизации, относящаяся к сеансу авторизации.
extForm
Указатель на внешнюю ссылку авторизации. По возврату это указывает на внешнее представление ссылки авторизации.
Возвращаемое значение
Код результата. Посмотрите Коды Результата Authorization Services.
Обсуждение
Эта функция создает внешнее представление ссылки авторизации так, чтобы можно было передать ее между процессами. Полномочия связываются сеансом, процессом и ограничениями по времени, таким образом, Вы не можете сохранить ссылку авторизации для другого процесса для использования. Вместо этого необходимо создать внешнее представление ссылки авторизации и передать ее надежно другому процессу. Используйте функцию
AuthorizationCreateFromExternalForm
усваивать внешнее представление ссылки авторизации.Если необходимо для Вашего приложения выполнить некоторые привилегированные операции, это - хорошая практика программирования для изоляции всех привилегированных операций в отдельном процессе, называемом инструментом помощника (см. Руководство по программированию Authorization Services для подробных данных). В этом случае необходимо передать ссылку авторизации на инструмент помощника так, чтобы Authorization Services могла сказать, что инструмент помощника работает от имени приложения. Выполнение так позволяет диалоговому окну авторизации показывать путь Вашего приложения, а не путь к инструменту помощника, и это позволяет системе определять, должно ли диалоговое окно авторизации иметь клавиатурный фокус.
Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.0 и позже.
-
Усваивает внешнее представление ссылки авторизации.
Объявление
Swift
func AuthorizationCreateFromExternalForm(_
extForm
: UnsafePointer<AuthorizationExternalForm>, _authorization
: UnsafeMutablePointer<AuthorizationRef>) -> OSStatusObjective C
OSStatus AuthorizationCreateFromExternalForm ( const AuthorizationExternalForm *extForm, AuthorizationRef *authorization );
Параметры
extForm
Указатель на внешнее представление ссылки авторизации Вы получаете от обработки вызовов.
authorization
Указатель на ссылку авторизации. По возврату это указывает на локальную копию ссылки авторизации. Сервер безопасности выделяет ссылку авторизации для Вас, таким образом, Вы не должны вызывать функцию
AuthorizationCreate
.Возвращаемое значение
Код результата. Посмотрите Коды Результата Authorization Services.
Обсуждение
При передаче ссылки авторизации между процессами используйте эту функцию для усвоения внешнего представления ссылки авторизации, Вы создали использование функции
AuthorizationMakeExternalForm
.Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.0 и позже.
-
Получает правильное определение как словарь.
Объявление
Swift
func AuthorizationRightGet(_
rightName
: UnsafePointer<Int8>, _rightDefinition
: UnsafeMutablePointer<Unmanaged<CFDictionary>?>) -> OSStatusObjective C
OSStatus AuthorizationRightGet ( const char *rightName, CFDictionaryRef *rightDefinition );
Параметры
rightName
Символьная строка ASCII, представляющая правильное имя. Подстановочные имена права допустимы.
rightDefinition
Ссылка на словарь. По возврату это указывает на словарь ключей, определяющих право. Передача
NULL
проверки, если определяется право. Необходимо выпустить память, используемую возвращенным словарем.Возвращаемое значение
Код результата. Посмотрите Коды Результата Authorization Services.
Обсуждение
Вам не нужна ссылка авторизации для использования этой функции, потому что база данных правил управления является читаемым миром.
Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.3 и позже.
-
Создает или обновляет правильную запись в базе данных правил управления.
Объявление
Swift
func AuthorizationRightSet(_
authRef
: AuthorizationRef, _rightName
: UnsafePointer<Int8>, _rightDefinition
: AnyObject!, _descriptionKey
: CFString!, _bundle
: CFBundle!, _localeTableName
: CFString!) -> OSStatusObjective C
OSStatus AuthorizationRightSet ( AuthorizationRef authRef, const char *rightName, CFTypeRef rightDefinition, CFStringRef descriptionKey, CFBundleRef bundle, CFStringRef localeTableName );
Параметры
authRef
Допустимая ссылка авторизации раньше авторизовывала модификации.
rightName
Символьная строка ASCII, представляющая правильное имя. База данных правил управления не принимает подстановочные имена права.
rightDefinition
Или CFDictionary, содержащий ключи, определяющие правила или CFString представление имени другого права, правила которого Вы хотите копировать. Посмотрите
Policy Database Constants
для некоторых возможных значений.descriptionKey
Ссылка CFString, используемая в качестве ключа для поиска локализованных описаний. Если никакая локализация не найдена, это - само описание. Этот параметр является дополнительным; передача
NULL
если Вы не требуете его.bundle
Пакет для получения локализаций, от если не основной пакет. Этот параметр является дополнительным; передача
NULL
если Вы не требуете его.localeTableName
Представление CFString имени таблицы, от которого можно получить локализации. Этот параметр является дополнительным; передача
NULL
если у Вас нет локализаций, или Вы хотите использовать локализации, доступные в Локэлизэбле.стрингсе.Возвращаемое значение
Код результата. Посмотрите Коды Результата Authorization Services.
Обсуждение
Право, которое Вы создаете, должно быть явным правом без подстановочных знаков. Подстановочные права для использования системными администраторами для конфигурации сайта.
Можно использовать эту функцию, чтобы создать новое право или изменить существующее право. Например:
AuthorizationRightSet(NULL, "com.ifoo.ifax.send",
CFSTR(kAuthorizationRuleIsAdmin), CFSTR("Authorize sending of a fax"), NULL, NULL);
добавляет правило для разрешения администраторам отправить факсы. Этот пример создает названное право
“com.ifoo.ifax.send”
и устанавливает правила, чтобы потребовать, чтобы пользователь был администратором при помощиkAuthorizationRuleIsAdmin
постоянный. Этот пример также устанавливает комментарий, чтобы позволить системному администратору знать, что право разрешает администраторов отправлять факс.Поскольку первый параметр
NULL
, новоеAuthorizationRef
объект создают внутренне и избавляются. Если Вам нужно к дальнейшему использованиюAuthorizationRef
объект (например, при вызовеAuthorizationExecuteWithPrivileges
), необходимо явно создать объект и передать его в как первый параметрAuthorizationRightSet
, тогда освободите его с вызовом кAuthorizationFree
.Для указания дополнительных атрибутов для права можно передать
CFDictionary
введитеrightDefinition
параметр как показано в следующем примере.CFStringRef keys[2] = {CFSTR(kRightRule), CFSTR(kRightComment)};
CFStringRef values[2] = {CFSTR(kAuthorizationRuleIsAdmin), CFSTR("authorizes sending of 1 fax message")};
AuthorizationRef authRef;
CFDictionaryRef aDict;
aDict = CFDictionaryCreate(NULL, (void *)keys, (void *)values, 2, &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
AuthorizationCreate(NULL, NULL, 0, &authRef);
AuthorizationRightSet(authRef, "com.ifoo.ifax.send", aDict, CFSTR("Authorize sending of a fax"), NULL, NULL);
CFRelease(aDict);
...
AuthorizationFree(authRef, kAuthorizationFlagDefaults);
Этот вызов создает то же право как прежде, но добавляет определенный правильный комментарий к определению правил.
При указании комментариев необходимо быть определенными о том, что необходимо авторизовать. Например, средние значения доказательства, требуемого для
kAuthorizationRuleAuthenticateAsAdmin
(имя пользователя и пароль), не должен быть включен здесь, так как то правило могло бы быть сконфигурировано по-другому.Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.3 и позже.
-
Удаляет право из базы данных правил управления.
Объявление
Swift
func AuthorizationRightRemove(_
authRef
: AuthorizationRef, _rightName
: UnsafePointer<Int8>) -> OSStatusObjective C
OSStatus AuthorizationRightRemove ( AuthorizationRef authRef, const char *rightName );
Параметры
authRef
Допустимая ссылка авторизации раньше авторизовывала модификации.
rightName
Символьная строка ASCII, представляющая правильное имя. Эта функция не принимает подстановочные имена права.
Возвращаемое значение
Код результата. Посмотрите Коды Результата Authorization Services.
Обсуждение
Право, которое Вы удаляете, должно быть явным правом без подстановочных знаков. Подстановочные права для использования системными администраторами для конфигурации сайта.
Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.3 и позже.
-
Выполняет исполнимый инструмент с полномочиями пользователя root.
Объявление
Objective C
OSStatus AuthorizationExecuteWithPrivileges ( AuthorizationRef authorization, const char *pathToTool, AuthorizationFlags options, char *const *arguments, FILE **communicationsPipe );
Параметры
authorization
Ссылка авторизации, относящаяся к сеансу авторизации.
pathToTool
Полный путь POSIX инструмента для выполнения.
options
Зарезервированные опции. Передайте
kAuthorizationFlagDefaults
постоянный.arguments
Вектор argv-стиля строк (массив завершенных нулем
char *
указатели, заканчивающиеся Указателем Нулевого) для отправки к инструменту. (Вы не должны передавать имя команды как первый параметр.)communicationsPipe
Указатель на файловую структуру. Сервер безопасности создает файл, открывает его для чтения и записи, и подключает его к стандартному вводу и выводу инструмента. По возврату необходимо закрыться и избавиться от этого использования файла
fclose
когда Ваша коммуникация завершена. ПередачаNULL
если Вам не нужен канал передачи.Возвращаемое значение
Код результата. Посмотрите Коды Результата Authorization Services.
Обсуждение
Эта функция позволяет Вам выполнить инструмент, который Вы указываете в
pathToTool
параметр как отдельный, привилегированный процесс. Новый процесс будет работать с полномочиями пользователя root независимо от полномочий процесса вызова. Новый процесс может получить ссылку авторизации путем вызывания функцииAuthorizationCopyPrivilegedReference
. Параметры Вы передаете вarguments
параметр передается к новому процессуargv
параметр. Ряд дескрипторов файлов соединяется со стандартным вводом и выводом нового процесса так, чтобы Ваш процесс мог связаться с новым процессом.Чтобы проверить, разрешен ли пользователь выполнить эту работу, необходимо предварительно авторизовать
kAuthorizationRightExecute
право. ПосмотритеAuthorizationItem
для описания того, какая информация включена в элемент авторизации для этого права.Специальные замечания
Необходимо использовать эту функцию только, чтобы позволить установщикам работать как корень и позволять a
setuid
инструмент для восстановленияsetuid
бит, если потеряно. Эта функция работает, только если Сервер безопасности устанавливает соответствующие полномочия.Эта функция излагает проблему безопасности, потому что она без разбора выполнит любой инструмент или приложение, сильно увеличивая угрозу безопасности. Необходимо избежать использования этой функции, если это возможно. Одна альтернатива должна разделить Ваш код на две части — приложение и setuid инструмент. Приложение вызывает setuid инструмент с помощью стандартных методов. setuid инструмент может тогда выполнить привилегированные операции. Если инструмент проигрывает, его setuid укусил, используйте
AuthorizationExecuteWithPrivileges
функционируйте для восстановления его. Факторинг Ваша программа минимизирует использование этой функции и снижает риск вреда. Считайте Внутренний OS X: Выполнение Привилегированных Операций С Authorization Services.Обратите внимание на то, что эта функция уважает бит setuid, если это установлено. Т.е. если инструмент, который Вы выполняете, будет иметь свой setuid набор битов и свой набор владельца к foo, то инструмент будет выполняться с пользовательскими полномочиями foo’s, не полномочиями пользователя root. Гарантировать что Ваш вызов к
AuthorizationExecuteWithPrivileges
функционируйте работы, как предназначено, удостоверьтесь setuid бит инструмента, который Вы хотите выполнить, очищен перед вызовомAuthorizationExecuteWithPrivileges
выполнить инструмент.Оператор импорта
Objective C
@import Security;
Доступность
Доступный в OS X v10.0 и позже.
Осуждаемый в OS X v10.7.
-
Получает ссылку авторизации, мимо которой проходят
AuthorizationExecuteWithPrivileges
функция.Объявление
Objective C
OSStatus AuthorizationCopyPrivilegedReference ( AuthorizationRef *authorization, AuthorizationFlags flags );
Параметры
authorization
Указатель на ссылку авторизации. Сервер безопасности выделяет ссылку авторизации для Вас, таким образом, Вы не должны вызывать функцию
AuthorizationCreate
. По возврату это указывает на копию ссылки авторизации, привыкшей в вызове кAuthorizationExecuteWithPrivileges
функция.flags
Зарезервированные опции. Передайте
kAuthorizationFlagDefaults
постоянный.Возвращаемое значение
Код результата. Посмотрите Коды Результата Authorization Services.
Обсуждение
Эта функция получает ссылку авторизации, которую Вы передаете в функции
AuthorizationExecuteWithPrivileges
. Новый процесс может использовать ссылку авторизации для проверки полномочий, полученных обработкой вызовов.Оператор импорта
Objective C
@import Security;
Доступность
Доступный в OS X v10.0 и позже.
Осуждаемый в OS X v10.7.
-
Представляет ряд данных о среде, такой как имя пользователя и другая информация, собранная во время оценки авторизации.
Объявление
Swift
typealias AuthorizationEnvironment = AuthorizationItemSet
Objective C
typedef AuthorizationItemSet AuthorizationEnvironment;
Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.0 и позже.
-
Внешнее представление ссылки авторизации.
Объявление
Objective C
struct AuthorizationExternalForm { char bytes[kAuthorizationExternalFormLength]; };
Поля
bytes
Массив символов, представляющих внешнюю форму ссылки авторизации.
Обсуждение
Ссылки авторизации связываются сеансом, процессом и ограничениями по времени, таким образом, Вы не можете сохранить ссылки авторизации для другого процесса для использования. Используйте функции
AuthorizationMakeExternalForm
иAuthorizationCreateFromExternalForm
воплощать и усваивать ссылку авторизации. Приложения должны заботиться для не раскрытия внешней ссылки авторизации на потенциальных атакующих, так как любой процесс может использовать эту внешнюю ссылку авторизации для доступа к ссылке авторизации. -
Представляет немного маски опций авторизации.
Объявление
Swift
typealias AuthorizationFlags = UInt32
Objective C
typedef UInt32 AuthorizationFlags;
Обсуждение
Посмотрите Опции Авторизации для описания масок, которые можно использовать.
Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.0 и позже.
-
Содержит информацию о праве авторизации или среде авторизации.
Объявление
Swift
struct AuthorizationItem { var name: AuthorizationString var valueLength: UInt var value: UnsafeMutablePointer<Void> var flags: UInt32 }
Objective C
typedef struct { AuthorizationString name; UInt32 valueLength; void *value; UInt32 flags; }AuthorizationItem;
Поля
name
Требуемое имя права авторизации или данных среды. Имя права - что-то, что Вы создаете. Необходимо назвать права в стиле подобными именам пакета Java. Например,
"com.myOrganization.myProduct.myRight"
. Установите это поле вkAuthorizationRightExecute
при запросе права на использование в функцииAuthorizationExecuteWithPrivileges
.Посмотрите
Security.framework/Headers/AuthorizationTags.h
заголовочный файл для возможных значений для данных среды.valueLength
32-разрядное целое число без знака, представляющее число байтов в
value
поле. УстановитеvalueLength
поле к0
если Вы устанавливаетеvalue
поле кNULL
.value
Указатель на информацию, имеющую отношение
name
поле. Например, еслиname
поле установлено в значение, представленное константойkAuthorizationRightExecute
, тогда установитеvalue
поле к полному пути POSIX инструмента Вы хотите выполниться. В большинстве других случаев, набор это поле кNULL
.flags
Зарезервированные биты опции. Набор к
0
.Обсуждение
При использовании элемента авторизации для содержания права установите
name
поле к имени права — например,"com.myOrganization.myProduct.myRight"
,valueLength
иflags
поля к0
, иvalue
поле кNULL
. Для получения дополнительной информации об именовании прав считайте Руководство по программированию Authorization ServicesПри использовании элемента авторизации для
AuthorizationExecuteWithPrivileges
функция, наборname
поле кkAuthorizationRightExecute
, иflags
поле к0
. Установитеvalue
поле к полному пути POSIX инструмента для выполнения иvalueLength
поле к длине байта значения вvalue
поле.При использовании элемента авторизации для содержания данных среды установите
name
поле к имени данных среды — например,kAuthorizationEnvironmentUsername
— иflags
поле к0
. Установитеvalue
поле, в этом случае, к фактическому имени пользователя иvalueLength
поле к длине байта значения вvalue
поле.Доступность
Доступный в OS X v10.0 и позже.
-
Представляет ряд элементов авторизации.
Объявление
Swift
struct AuthorizationItemSet { var count: UInt32 var items: UnsafeMutablePointer<AuthorizationItem> }
Objective C
typedef struct { UInt32 count; AuthorizationItem *items; }AuthorizationItemSet;
Поля
count
Число элементов в
items
массив.items
Указатель на массив элементов авторизации. Если
count
больше, чем1
,items
точки к первому элементу в массиве таких элементов. Необходимо установить этот параметр наNULL
при отсутствии элементов.Доступность
Доступный в OS X v10.0 и позже.
-
Представляет указатель на непрозрачную ссылочную структуру авторизации.
Объявление
Swift
typealias AuthorizationRef = COpaquePointer
Objective C
typedef const struct AuthorizationOpaqueRef* AuthorizationRef;
Обсуждение
Этот тип данных указывает на структуру на использование Сервера безопасности, чтобы хранить информацию о сеансе авторизации. Используйте функции, описанные в Функциях Authorization Services, чтобы создать, получить доступ, и освободить ссылку авторизации.
Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.0 и позже.
-
Представляет ряд прав авторизации.
Объявление
Swift
typealias AuthorizationRights = AuthorizationItemSet
Objective C
typedef AuthorizationItemSet AuthorizationRights;
Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.0 и позже.
-
Представляет завершенную нулем строку в кодировании UTF-8.
Объявление
Swift
typealias AuthorizationString = UnsafePointer<Int8>
Objective C
typedef const char* AuthorizationString;
Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.0 и позже.
-
Определите допустимые опции авторизации.
Объявление
Swift
var kAuthorizationFlagDefaults: Int { get } var kAuthorizationFlagInteractionAllowed: Int { get } var kAuthorizationFlagExtendRights: Int { get } var kAuthorizationFlagPartialRights: Int { get } var kAuthorizationFlagDestroyRights: Int { get } var kAuthorizationFlagPreAuthorize: Int { get } var kAuthorizationFlagNoData: Int { get }
Objective C
enum { kAuthorizationFlagDefaults = 0, kAuthorizationFlagInteractionAllowed = (1 << 0), kAuthorizationFlagExtendRights = (1 << 1), kAuthorizationFlagPartialRights = (1 << 2), kAuthorizationFlagDestroyRights = (1 << 3), kAuthorizationFlagPreAuthorize = (1 << 4), kAuthorizationFlagNoData = (1 << 20) };
Константы
-
kAuthorizationFlagDefaults
kAuthorizationFlagDefaults
Если никакие биты не установлены, ни одна из следующих функций не доступна.
Доступный в OS X v10.0 и позже.
-
kAuthorizationFlagInteractionAllowed
kAuthorizationFlagInteractionAllowed
Если бит, указанный этой маской, установлен, Вы разрешаете Серверу безопасности взаимодействовать с пользователем при необходимости.
Доступный в OS X v10.0 и позже.
-
kAuthorizationFlagExtendRights
kAuthorizationFlagExtendRights
Если бит, указанный этой маской, установлен, Сервер безопасности пытается предоставить права, которые требуют. Как только Сервер безопасности отклоняет одно право, он игнорирует остающиеся требуемые права.
Доступный в OS X v10.0 и позже.
-
kAuthorizationFlagPartialRights
kAuthorizationFlagPartialRights
Если бит, указанный этой маской и
kAuthorizationFlagExtendRights
маска установлена, Сервер безопасности предоставляет или отклоняет права на отдельной основе, и все права проверяются.Доступный в OS X v10.0 и позже.
-
kAuthorizationFlagDestroyRights
kAuthorizationFlagDestroyRights
Если бит, указанный этой маской, установлен, Сервер безопасности отменяет авторизацию от процесса, а также от любого другого процесса, совместно использующего авторизацию. Если бит, указанный этой маской, не установлен, Сервер безопасности отменяет авторизацию от процесса, но не от других процессов, совместно использующих авторизацию.
Доступный в OS X v10.0 и позже.
-
kAuthorizationFlagPreAuthorize
kAuthorizationFlagPreAuthorize
Если бит, указанный этой маской, установлен, Сервер безопасности предварительно авторизовывает права, которые требуют.
Доступный в OS X v10.0 и позже.
-
kAuthorizationFlagNoData
kAuthorizationFlagNoData
Частные биты. Не использовать.
Доступный в OS X v10.0 и позже.
Обсуждение
Биты, представленные этими масками, сообщают Серверу безопасности, как продолжить с функцией, в которой Вы передаете их. Установите все неиспользованные биты в
0
допускать будущее расширение. -
-
Определяет оценивает наборы Сервера безопасности в элементе авторизации
flag
поле.Объявление
Swift
var kAuthorizationFlagCanNotPreAuthorize: Int { get }
Objective C
enum { kAuthorizationFlagCanNotPreAuthorize = (1 << 0) };
Константы
-
kAuthorizationFlagCanNotPreAuthorize
kAuthorizationFlagCanNotPreAuthorize
Указывает, что Сервер безопасности не мог предварительно авторизовать право.
Доступный в OS X v10.0 и позже.
Обсуждение
-
-
Определяет пустую среду.
Объявление
Objective C
#define kAuthorizationEmptyEnvironment NULL
Константы
-
Определяет длину байта внешней ссылки авторизации.
Объявление
Swift
var kAuthorizationExternalFormLength: Int { get }
Objective C
enum { kAuthorizationExternalFormLength = 32 };
Константы
-
kAuthorizationExternalFormLength
kAuthorizationExternalFormLength
Указывает, в числе байтов, длине массива в
AuthorizationExternalForm
структура.Доступный в OS X v10.0 и позже.
-
-
Укажите тип данных среды или права.
Объявление
Swift
var kAuthorizationEnvironmentUsername: String { get } var kAuthorizationEnvironmentPassword: String { get } var kAuthorizationEnvironmentShared: String { get } var kAuthorizationRightExecute: String { get } var kAuthorizationEnvironmentPrompt: String { get } var kAuthorizationEnvironmentIcon: String { get }
Objective C
#define kAuthorizationEnvironmentUsername "username" #define kAuthorizationEnvironmentPassword "password" #define kAuthorizationEnvironmentShared "shared" #define kAuthorizationRightExecute "system.privilege.admin" #define kAuthorizationEnvironmentPrompt "prompt" #define kAuthorizationEnvironmentIcon "icon"
Константы
-
kAuthorizationEnvironmentUsername
kAuthorizationEnvironmentUsername
Тип для
AuthorizationItem
содержа имя пользователя.Доступный в OS X v10.0 и позже.
-
kAuthorizationEnvironmentPassword
kAuthorizationEnvironmentPassword
Тип для
AuthorizationItem
содержа пароль.Доступный в OS X v10.0 и позже.
-
kAuthorizationEnvironmentShared
kAuthorizationEnvironmentShared
Тип для
AuthorizationItem
содержа совместно используемое право.Добавление a
kAuthorizationEnvironmentShared
запись в среде заставляет имя пользователя и пароль быть добавленным к совместно используемому учетному пулу сеанса вызывающего приложения. Это означает, что дальнейшие вызовы другими приложениями в этом сеансе автоматически имеют эти учетные данные в наличии для них.Доступный в OS X v10.0 и позже.
-
kAuthorizationRightExecute
kAuthorizationRightExecute
Тип для
AuthorizationItem
запрос права вызватьAuthorizationExecuteWithPrivileges
.В дополнение к этому праву необходимо получить любые права, инструмент должен выполнить свою работу от Вашего имени.
AuthorizationItem
должен содержать полный путь инструмента, который Вы хотите выполнить вvalue
иvalueLength
поля. В будущем мы ограничим право только выполнить запрашиваемый тракт, и мы выведем на экран эту информацию пользователю.Доступный в OS X v10.0 и позже.
-
kAuthorizationEnvironmentPrompt
kAuthorizationEnvironmentPrompt
Тип для
AuthorizationItem
содержа имя элемента авторизации, который должен быть передан в среду при указании специфичного для вызова дополнительного текста. Значение должно быть локализованной строкой UTF-8.Доступный в OS X v10.3 и позже.
-
kAuthorizationEnvironmentIcon
kAuthorizationEnvironmentIcon
Тип для
AuthorizationItem
содержа имя элемента авторизации, который должен быть передан в среду при указании альтернативного значка. Значение должно быть полным путем к изображению, совместимому сNSImage
класс.Доступный в OS X v10.3 и позже.
Обсуждение
Эти теги являются возможными значениями для
name
поле элемента авторизации. Это не комплексный набор. Вы определяете имя права запросить. Эти теги среды для будущего использования. -
-
Определяет константы для использования в установке прав и правил в базе данных правил управления.
Объявление
Swift
var kAuthorizationRightRule: String { get } var kAuthorizationRuleIsAdmin: String { get } var kAuthorizationRuleAuthenticateAsAdmin: String { get } var kAuthorizationRuleAuthenticateAsSessionUser: String { get } var kAuthorizationRuleClassAllow: String { get } var kAuthorizationRuleClassDeny: String { get } var kAuthorizationComment: String { get }
Objective C
#define kAuthorizationRightRule "rule" #define kAuthorizationRuleIsAdmin "is-admin" #define kAuthorizationRuleAuthenticateAsAdmin "authenticate-admin" #define kAuthorizationRuleAuthenticateAsSessionUser "authenticate-session-user" #define kAuthorizationRuleClassAllow “allow” #define kAuthorizationRuleClassDeny “deny” #define kAuthorizationComment "comment”
Константы
-
kAuthorizationRightRule
kAuthorizationRightRule
Указывает ключ делегации правила. Вместо того, чтобы указать точное поведение, некоторые правила поставляются с системой и могут использоваться в качестве правил делегата. Используйте это с любой из констант определения правила делегата.
Доступный в OS X v10.3 и позже.
-
kAuthorizationRuleIsAdmin
kAuthorizationRuleIsAdmin
Указывает определение правила делегата постоянное указание, что пользователь должен быть администратором.
Доступный в OS X v10.3 и позже.
-
kAuthorizationRuleAuthenticateAsAdmin
kAuthorizationRuleAuthenticateAsAdmin
Указывает определение правила делегата постоянное указание, что пользователь должен аутентифицировать как администратор.
Доступный в OS X v10.3 и позже.
-
kAuthorizationRuleAuthenticateAsSessionUser
kAuthorizationRuleAuthenticateAsSessionUser
Указывает определение правила делегата постоянное указание, что пользователь должен аутентифицировать как владелец сеанса (вошел в систему пользователь).
Доступный в OS X v10.3 и позже.
-
kAuthorizationRuleClassAllow
kAuthorizationRuleClassAllow
Указывает определение правила делегата, постоянное, который всегда позволяет указанное право.
Доступный в OS X v10.3 и позже.
-
kAuthorizationRuleClassDeny
kAuthorizationRuleClassDeny
Указывает определение правила делегата, постоянное, который всегда отклоняет указанное право.
Доступный в OS X v10.3 и позже.
-
kAuthorizationComment
kAuthorizationComment
Указывает комментарии для правила. Комментарии, кажется, в базе данных правил управления для администратора понимают то, для чего правило. Комментарии правила не являются тем же как локализованными описаниями, представленными пользователю.
Доступный в OS X v10.3 и позже.
Обсуждение
Можно использовать эти константы при создании или изменении правила в базе данных правил управления с помощью
AuthorizationRightSet
функция. -
Наиболее распространенные коды результата, возвращенные Сервером безопасности, перечислены в таблице ниже.
-
Работа завершилась успешно.
Значение
0
Описание
Работа завершилась успешно.
Доступный в OS X v10.0 и позже.
-
set
параметр недопустим.Значение
- 60001
Описание
set
параметр недопустим.Доступный в OS X v10.0 и позже.
-
authorization
параметр недопустим.Значение
- 60002
Описание
authorization
параметр недопустим.Доступный в OS X v10.0 и позже.
-
tag
параметр недопустим.Значение
- 60003
Описание
tag
параметр недопустим.Доступный в OS X v10.0 и позже.
-
authorizedRights
параметр недопустим.Значение
- 60004
Описание
authorizedRights
параметр недопустим.Доступный в OS X v10.0 и позже.
-
Сервер безопасности отклонил авторизацию для один или несколько требуемые права. Эта ошибка также возвращается, если не было никакого определения, найденного в базе данных правил управления, или определение не могло бы быть создано.
Значение
- 60005
Описание
Сервер безопасности отклонил авторизацию для один или несколько требуемые права. Эта ошибка также возвращается, если не было никакого определения, найденного в базе данных правил управления, или определение не могло бы быть создано.
Доступный в OS X v10.0 и позже.
-
Пользователь отменил работу.
Значение
- 60006
Описание
Пользователь отменил работу.
Доступный в OS X v10.0 и позже.
-
Сервер безопасности отклонил авторизацию, потому что не позволяется никакое взаимодействие с пользователем.
Значение
- 60007
Описание
Сервер безопасности отклонил авторизацию, потому что не позволяется никакое взаимодействие с пользователем.
Доступный в OS X v10.0 и позже.
-
Произошла нераспознанная внутренняя ошибка.
Значение
- 60008
Описание
Произошла нераспознанная внутренняя ошибка.
Доступный в OS X v10.0 и позже.
-
Сервер безопасности отклонил воплощение ссылки авторизации.
Значение
- 60009
Описание
Сервер безопасности отклонил воплощение ссылки авторизации.
Доступный в OS X v10.0 и позже.
-
Сервер безопасности отклонил интернализацию ссылки авторизации.
Значение
- 60010
Описание
Сервер безопасности отклонил интернализацию ссылки авторизации.
Доступный в OS X v10.0 и позже.
-
flags
параметр недопустим.Значение
- 60011
Описание
flags
параметр недопустим.Доступный в OS X v10.0 и позже.
-
Инструменту не удалось выполниться.
Значение
- 60031
Описание
Инструменту не удалось выполниться.
Доступный в OS X v10.0 и позже.
-
Попытке выполнить инструмент не удалось возвратить успех или код ошибки.
Значение
- 60032
Описание
Попытке выполнить инструмент не удалось возвратить успех или код ошибки.
Доступный в OS X v10.0 и позже.