2017-01-24 34 views
5

Istnieje opcja w Keychain Access, aby umożliwić wszystkim aplikacjom dostęp do breloków bez ograniczeń. Keychain Access - Access Control tab Nie można ustawić programowo. Próbowałem utworzyć i ustawić nowy SecAccessRef z pustą listą ACL, tak naprawdę nic nie zmieniłem (używając SecItemUpdate aktualizowania kSecAttrAccess). Próbowałem również uzyskać wszystkie listy ACL dla wszystkich znaczników autoryzacji dla pozycji i ustawienie zawartości listy ACL w pustej tablicy dla kombinacji ACL/tag. Mogłem wyczyścić listę dozwolonych aplikacji, ale to nie pozwoliło wszystkim aplikacjom na dostęp do elementu bez ograniczeń. Nie widzę sposobu na ustawienie tego za pomocą keychain api.Jak zezwolić wszystkim aplikacjom na dostęp do pęku kluczy bez podpowiedzi

Moje pytanie brzmi: jak manipulować programem Access lub jego listami ACL, aby umożliwić nieograniczony dostęp do elementu pęku kluczy lub co najmniej nieograniczonego czytania?

Odpowiedz

1

Z mojego doświadczenia większość nowszych "convenience" metod API Bezpieczeństwa, które elementy depozyt na pęku kluczy:

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

dodać wpis ACL autoryzacji change_acl dla haseł, kluczy prywatnych z pustą tablicą zaufanych aplikacji - co oznacza, że ​​żadna aplikacja nie może później modyfikować list ACL bez pytania użytkownika.

Wygląda na to, że nie można modyfikować list ACL dla większości istniejących elementów keychain bez pytania użytkownika.

Ale, jeśli dodać elementy do pęku kluczy (do którego można dostarczyć SecAccessRef własnego stworzenia) używać starszych metod zabezpieczeń API:

  • SecKeychainItemCreateFromContent()
  • SecKeyCreatePair() (przestarzałe w OS X 10.7, ale nadal działa)

to można skutecznie ustawić te pozycje na "Zezwalaj wszystkim aplikacjom na dostęp do tego elementu", co może być przydatne w zależności od aplikacji.

Oznacza to, że dla tych starszych funkcji można:

  1. Utwórz SecAccessRef użyciu SecAccessCreate() lub SecAccessCreateWithOwnerAndACL()
  2. Dodaj pojedynczy ACL do SecAccessRef z Any zezwolenia, nie szybka zachowanie (SecKeychainPromptSelector = 0) i zaufana lista aplikacji przy użyciu SecACLCreateWithSimpleContents()
  3. Przeprowadź SecAccessRef podczas tworzenia elementu (ów) z pękiem kluczy za pomocą powyższych interfejsów API, aby uzyskać "Zezwalaj wszystkim aplikacjom na dostęp do tego elementu"