Access Control Lists
Control which apps have access to keychain items in macOS.
Overview
In macOS, for items not stored on the iCloud keychain, each protected keychain item—like a password or private key—has an associated access instance that contains an access control list (ACL). The entries in this list in turn each contain an array of operations and an array of apps trusted to carry out those operations with the item. The collection of ACL entries govern the accessibility of the corresponding keychain item.
[Image]
When an app attempts to access a keychain item for a particular purpose—like using a private key to sign a document—the system looks for an entry in the item’s ACL containing the operation. If there’s no entry that lists the operation, then the system denies access and it’s up to the calling app to try something else or to notify the user.
If there is an entry that lists the operation, the system checks whether the calling app is among the entry’s trusted apps. If so, the system grants access. Otherwise, the system prompts the user for confirmation. The user may choose to Deny, Allow, or Always Allow the access. In the latter case, the system adds the app to the list of trusted apps for that entry, enabling the app to gain access in the future without prompting the user again.
Topics
Access Creation
SecAccessCreate(_:_:_:)SecAccessCreateWithOwnerAndACL(_:_:_:_:_:)SecAccessOwnerTypeSecAccessOwnerType ValuesSecAccessSecAccessGetTypeID()
Access Query
Access Control List Entries
SecACLCreateWithSimpleContents(_:_:_:_:_:)SecACLRemove(_:)ACL Authorization KeysSecKeychainPromptSelectorSecACLSecACLGetTypeID()
Access Control List Configuration
SecACLCopyContents(_:_:_:_:)SecACLSetContents(_:_:_:_:)SecACLCopyAuthorizations(_:)SecACLUpdateAuthorizations(_:_:)
Trusted Applications
SecTrustedApplicationCreateFromPath(_:_:)SecTrustedApplicationCopyData(_:_:)SecTrustedApplicationSetData(_:_:)SecTrustedApplicationSecTrustedApplicationGetTypeID()