2017-01-24 4 views
5

Es gibt eine Option in Keychain Access, damit alle Anwendungen uneingeschränkt auf den Schlüsselbundartikel zugreifen können. Keychain Access - Access Control tabSo ermöglichen Sie allen Anwendungen den Zugriff auf den Schlüsselbundartikel ohne Eingabeaufforderung

Ich weiß nicht, wie Sie es programmgesteuert festlegen. Ich habe versucht, neue SecAccessRef mit leeren ACL zu erstellen und festzulegen, ändert nichts wirklich (unter Verwendung SecItemUpdate Aktualisierung kSecAttrAccess). Ich versuchte auch, alle ACL-Listen für alle Ermächtigungstags für Gegenstand und Einstellungs-ACL-Inhalt zu einem leeren Feld für diese ACL/Umbaukombinationen zu erhalten. Ich konnte die Liste erlaubter Apps löschen, aber dies erlaubte nicht allen Anwendungen, auf Elemente ohne Einschränkungen zuzugreifen. Ich sehe keine Möglichkeit, dies mit Keychain API einzustellen.

Also meine Frage ist, wie man Access Object oder seine ACLs zu manipulieren, um den uneingeschränkten Zugriff auf Schlüsselbund Artikel oder zumindest uneingeschränktes Lesen zu ermöglichen?

Antwort

1

Aus meiner Erfahrung die meisten der neueren "Convenience" Methoden in der Sicherheit API die Hinterlegung Elemente in einem Schlüsselbund:

  • SecKeychainAddGenericPassword()
  • SecKeychainAddInternetPassword()
  • SecKeyGeneratePair()

Fügen Sie einen change_acl Autorisierungs-ACL-Eintrag für Kennwörter hinzu, private Schlüssel mit einem leeren Array von vertrauenswürdigen Anwendungen - was bedeutet, dass keine Anwendung die ACLs ohne Benutzereingabe ändern kann.

Im Allgemeinen scheint es, dass Sie die ACLs für die meisten vorhandenen Schlüsselbundelemente nicht ohne Benutzereingabeaufforderung ändern können.

Aber, wenn Sie verwenden ältere Sicherheits API-Methoden Artikel zu einem Schlüsselbund hinzuzufügen (zu dem Sie eine SecAccessRef Ihrer eigenen Schöpfung liefern):

  • SecKeychainItemCreateFromContent()
  • SecKeyCreatePair() (veraltet in OS X 10.7, funktioniert aber immer noch)

dann können Sie diese Elemente effektiv auf "Alle Anwendungen auf dieses Element zugreifen" einstellen, was je nach Anwendung nützlich sein kann.

Das heißt, für diese älteren Funktionen können Sie:

  1. ein SecAccessRef erstellen mit SecAccessCreate() oder SecAccessCreateWithOwnerAndACL()
  2. eine einzige ACL In der SecAccessRef mit Any Genehmigung, keine Aufforderung Verhalten (SecKeychainPromptSelector = 0) und eine NULL vertrauenswürdige Anwendungsliste mit SecACLCreateWithSimpleContents()
  3. Übergeben Sie die SecAccessRef, wenn Sie die Schlüsselbundelemente mit den obigen APIs erstellen, um "Allen Anwendungen den Zugriff auf dieses Element zu ermöglichen"
Verwandte Themen