2017-01-24 34 views
5

Có một tùy chọn trong Keychain Access để cho phép tất cả các ứng dụng truy cập mục keychain mà không bị hạn chế. Keychain Access - Access Control tabCách cho phép tất cả các ứng dụng truy cập mục keychain mà không cần nhắc

Tôi không biết cách đặt chương trình theo cách lập trình. Tôi đã cố gắng tạo và thiết lập SecAccessRef mới với ACL trống, không thực sự thay đổi bất cứ điều gì (sử dụng SecItemUpdate cập nhật kSecAttrAccess). Tôi cũng đã thử nhận tất cả các danh sách ACL cho tất cả các thẻ ủy quyền cho mục và đặt nội dung ACL thành một mảng trống cho các kết hợp ACL/thẻ đó. Tôi đã có thể xóa danh sách ứng dụng được phép nhưng điều này không cho phép tất cả các ứng dụng truy cập mục mà không bị hạn chế. Tôi không thấy một cách để thiết lập điều này bằng cách sử dụng api keychain.

Vì vậy, câu hỏi của tôi là làm thế nào để thao tác đối tượng truy cập hoặc ACL của nó để cho phép truy cập không giới hạn vào mục keychain hoặc đọc ít nhất không giới hạn?

Trả lời

1

Từ kinh nghiệm của tôi hầu hết các "thuận tiện" phương pháp gần đây hơn trong API an ninh mà mục tiền gửi vào một keychain:

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

thêm mục nhập ACL ủy quyền change_acl vào mật khẩu, khóa cá nhân với một loạt ứng dụng đáng tin cậy trống - nghĩa là không có ứng dụng nào sau đó có thể sửa đổi ACL mà không có lời nhắc người dùng.

Vì vậy, nói chung, có vẻ như bạn không thể sửa đổi ACL trên hầu hết các mặt hàng keychain hiện có mà không có lời nhắc người dùng.

Nhưng, nếu bạn sử dụng phương pháp an API cũ để thêm các mục vào một keychain (mà bạn có thể cung cấp một SecAccessRef sáng tạo của riêng bạn):

  • SecKeychainItemCreateFromContent()
  • SecKeyCreatePair() (không được chấp nhận trong OS X 10.7 nhưng vẫn hoạt động)

thì bạn có thể thiết lập hiệu quả các mục đó thành "Cho phép tất cả ứng dụng truy cập mục này" có thể hữu ích tùy thuộc vào ứng dụng của bạn.

Đó là, đối với các chức năng cũ hơn, bạn có thể:

  1. Tạo một SecAccessRef sử dụng SecAccessCreate() hoặc SecAccessCreateWithOwnerAndACL()
  2. Thêm một ACL duy nhất để các SecAccessRef với Any ủy quyền, không có hành vi prompt (SecKeychainPromptSelector = 0) và danh sách ứng dụng đáng tin cậy NULL sử dụng SecACLCreateWithSimpleContents()
  3. Vượt qua SecAccessRef khi tạo (các) mục keychain với các API ở trên để đạt được "Cho phép tất cả các ứng dụng truy cập mục này"
Các vấn đề liên quan