Службы авторизации 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если приложение не требует никаких прав в это время.environmentAuthorizationItemSetструктура, используемая при авторизации или предварительной авторизации прав.Не используемый в 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 = AuthorizationItemSetObjective 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 = UInt32Objective 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заголовочный файл для возможных значений для данных среды.valueLength32-разрядное целое число без знака, представляющее число байтов в
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 = COpaquePointerObjective C
typedef const struct AuthorizationOpaqueRef* AuthorizationRef;Обсуждение
Этот тип данных указывает на структуру на использование Сервера безопасности, чтобы хранить информацию о сеансе авторизации. Используйте функции, описанные в Функциях Authorization Services, чтобы создать, получить доступ, и освободить ссылку авторизации.
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.0 и позже.
-
Представляет ряд прав авторизации.
Объявление
Swift
typealias AuthorizationRights = AuthorizationItemSetObjective 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) };Константы
-
kAuthorizationFlagDefaultskAuthorizationFlagDefaultsЕсли никакие биты не установлены, ни одна из следующих функций не доступна.
Доступный в OS X v10.0 и позже.
-
kAuthorizationFlagInteractionAllowedkAuthorizationFlagInteractionAllowedЕсли бит, указанный этой маской, установлен, Вы разрешаете Серверу безопасности взаимодействовать с пользователем при необходимости.
Доступный в OS X v10.0 и позже.
-
kAuthorizationFlagExtendRightskAuthorizationFlagExtendRightsЕсли бит, указанный этой маской, установлен, Сервер безопасности пытается предоставить права, которые требуют. Как только Сервер безопасности отклоняет одно право, он игнорирует остающиеся требуемые права.
Доступный в OS X v10.0 и позже.
-
kAuthorizationFlagPartialRightskAuthorizationFlagPartialRightsЕсли бит, указанный этой маской и
kAuthorizationFlagExtendRightsмаска установлена, Сервер безопасности предоставляет или отклоняет права на отдельной основе, и все права проверяются.Доступный в OS X v10.0 и позже.
-
kAuthorizationFlagDestroyRightskAuthorizationFlagDestroyRightsЕсли бит, указанный этой маской, установлен, Сервер безопасности отменяет авторизацию от процесса, а также от любого другого процесса, совместно использующего авторизацию. Если бит, указанный этой маской, не установлен, Сервер безопасности отменяет авторизацию от процесса, но не от других процессов, совместно использующих авторизацию.
Доступный в OS X v10.0 и позже.
-
kAuthorizationFlagPreAuthorizekAuthorizationFlagPreAuthorizeЕсли бит, указанный этой маской, установлен, Сервер безопасности предварительно авторизовывает права, которые требуют.
Доступный в OS X v10.0 и позже.
-
kAuthorizationFlagNoDatakAuthorizationFlagNoDataЧастные биты. Не использовать.
Доступный в OS X v10.0 и позже.
Обсуждение
Биты, представленные этими масками, сообщают Серверу безопасности, как продолжить с функцией, в которой Вы передаете их. Установите все неиспользованные биты в
0допускать будущее расширение. -
-
Определяет оценивает наборы Сервера безопасности в элементе авторизации
flagполе.Объявление
Swift
var kAuthorizationFlagCanNotPreAuthorize: Int { get }Objective C
enum { kAuthorizationFlagCanNotPreAuthorize = (1 << 0) };Константы
-
kAuthorizationFlagCanNotPreAuthorizekAuthorizationFlagCanNotPreAuthorizeУказывает, что Сервер безопасности не мог предварительно авторизовать право.
Доступный в OS X v10.0 и позже.
Обсуждение
-
-
Определяет пустую среду.
Объявление
Objective C
#define kAuthorizationEmptyEnvironment NULLКонстанты
-
Определяет длину байта внешней ссылки авторизации.
Объявление
Swift
var kAuthorizationExternalFormLength: Int { get }Objective C
enum { kAuthorizationExternalFormLength = 32 };Константы
-
kAuthorizationExternalFormLengthkAuthorizationExternalFormLengthУказывает, в числе байтов, длине массива в
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"Константы
-
kAuthorizationEnvironmentUsernamekAuthorizationEnvironmentUsernameТип для
AuthorizationItemсодержа имя пользователя.Доступный в OS X v10.0 и позже.
-
kAuthorizationEnvironmentPasswordkAuthorizationEnvironmentPasswordТип для
AuthorizationItemсодержа пароль.Доступный в OS X v10.0 и позже.
-
kAuthorizationEnvironmentSharedkAuthorizationEnvironmentSharedТип для
AuthorizationItemсодержа совместно используемое право.Добавление a
kAuthorizationEnvironmentSharedзапись в среде заставляет имя пользователя и пароль быть добавленным к совместно используемому учетному пулу сеанса вызывающего приложения. Это означает, что дальнейшие вызовы другими приложениями в этом сеансе автоматически имеют эти учетные данные в наличии для них.Доступный в OS X v10.0 и позже.
-
kAuthorizationRightExecutekAuthorizationRightExecuteТип для
AuthorizationItemзапрос права вызватьAuthorizationExecuteWithPrivileges.В дополнение к этому праву необходимо получить любые права, инструмент должен выполнить свою работу от Вашего имени.
AuthorizationItemдолжен содержать полный путь инструмента, который Вы хотите выполнить вvalueиvalueLengthполя. В будущем мы ограничим право только выполнить запрашиваемый тракт, и мы выведем на экран эту информацию пользователю.Доступный в OS X v10.0 и позже.
-
kAuthorizationEnvironmentPromptkAuthorizationEnvironmentPromptТип для
AuthorizationItemсодержа имя элемента авторизации, который должен быть передан в среду при указании специфичного для вызова дополнительного текста. Значение должно быть локализованной строкой UTF-8.Доступный в OS X v10.3 и позже.
-
kAuthorizationEnvironmentIconkAuthorizationEnvironmentIconТип для
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”Константы
-
kAuthorizationRightRulekAuthorizationRightRuleУказывает ключ делегации правила. Вместо того, чтобы указать точное поведение, некоторые правила поставляются с системой и могут использоваться в качестве правил делегата. Используйте это с любой из констант определения правила делегата.
Доступный в OS X v10.3 и позже.
-
kAuthorizationRuleIsAdminkAuthorizationRuleIsAdminУказывает определение правила делегата постоянное указание, что пользователь должен быть администратором.
Доступный в OS X v10.3 и позже.
-
kAuthorizationRuleAuthenticateAsAdminkAuthorizationRuleAuthenticateAsAdminУказывает определение правила делегата постоянное указание, что пользователь должен аутентифицировать как администратор.
Доступный в OS X v10.3 и позже.
-
kAuthorizationRuleAuthenticateAsSessionUserkAuthorizationRuleAuthenticateAsSessionUserУказывает определение правила делегата постоянное указание, что пользователь должен аутентифицировать как владелец сеанса (вошел в систему пользователь).
Доступный в OS X v10.3 и позже.
-
kAuthorizationRuleClassAllowkAuthorizationRuleClassAllowУказывает определение правила делегата, постоянное, который всегда позволяет указанное право.
Доступный в OS X v10.3 и позже.
-
kAuthorizationRuleClassDenykAuthorizationRuleClassDenyУказывает определение правила делегата, постоянное, который всегда отклоняет указанное право.
Доступный в OS X v10.3 и позже.
-
kAuthorizationCommentkAuthorizationCommentУказывает комментарии для правила. Комментарии, кажется, в базе данных правил управления для администратора понимают то, для чего правило. Комментарии правила не являются тем же как локализованными описаниями, представленными пользователю.
Доступный в 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 и позже.
