2017-01-24 8 views
5

Keychain Access में कोई विकल्प है ताकि सभी एप्लिकेशन प्रतिबंधों के बिना कीचेन आइटम तक पहुंच सकें। Keychain Access - Access Control tabसभी अनुप्रयोगों को बिना किसी संकेत के कुंजीचेन आइटम तक पहुंचने की अनुमति कैसे दें

मुझे नहीं पता कि इसे प्रोग्रामेटिक रूप से कैसे सेट किया जाए। मैंने खाली एसीएल के साथ नया SecAccessRef बनाने और सेट करने का प्रयास किया है, वास्तव में कुछ भी नहीं बदलता है (SecItemUpdatekSecAttrAccess अपडेट करके)। मैंने आइटम के लिए सभी प्राधिकरण टैगों के लिए सभी एसीएल सूचियां प्राप्त करने और एसीएल/टैग संयोजनों के लिए एक खाली सरणी में एसीएल सामग्री सेट करने का भी प्रयास किया। मैं अनुमत ऐप्स सूची को साफ़ करने में सक्षम था लेकिन इसने सभी एप्लिकेशन को प्रतिबंधों के बिना आइटम तक पहुंचने की अनुमति नहीं दी। मुझे keychain api का उपयोग करके इसे सेट करने का कोई तरीका नहीं दिख रहा है।

तो मेरा सवाल है कि एक्सेस ऑब्जेक्ट या उसके एसीएल में हेरफेर करने के लिए किचेन आइटम या कम से कम अप्रतिबंधित पढ़ने के लिए अप्रतिबंधित पहुंच की अनुमति दें?

उत्तर

1
मेरे अनुभव से

सुरक्षा एपीआई में और हाल ही में "सुविधा" तरीकों में से सबसे जो कीचेन में जमा आइटम:

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

change_acl प्राधिकरण एसीएल प्रविष्टि को प्राधिकृत अनुप्रयोगों की एक खाली सरणी के साथ निजी कुंजी - जिसका अर्थ है कि कोई भी एप्लिकेशन उपयोगकर्ता संकेत के बिना एसीएल को बाद में संशोधित नहीं कर सकता है।

तो, सामान्यतः, ऐसा प्रतीत होता है कि आप बिना किसी उपयोगकर्ता प्रॉम्प्ट के अधिकांश मौजूदा कीचेन आइटमों पर एसीएल को संशोधित नहीं कर सकते हैं।

लेकिन, आप (जो करने के लिए आप अपने खुद के निर्माण के एक SecAccessRef आपूर्ति कर सकते हैं) एक कीचेन में आइटम जोड़ने के बड़े सुरक्षा एपीआई तरीकों का उपयोग करता है, तो:

  • SecKeychainItemCreateFromContent()
  • SecKeyCreatePair() ( ओएस एक्स 10.7 में बहिष्कृत है लेकिन अभी भी काम करता है)

तो आप प्रभावी रूप से उन वस्तुओं को "सभी एप्लिकेशन को इस आइटम तक पहुंचने की अनुमति दें" पर लागू कर सकते हैं जो आपके आवेदन के आधार पर उपयोगी हो सकता है।

है यही कारण है, इन पुराने कार्यों के लिए आप कर सकते हैं:

  1. एक SecAccessRef का उपयोग कर SecAccessCreate() या SecAccessCreateWithOwnerAndACL()
  2. Any प्राधिकरण, कोई शीघ्र व्यवहार के साथ SecAccessRef के लिए एक एकल एसीएल जोड़ें (SecKeychainPromptSelector = 0 बनाएं) और SecACLCreateWithSimpleContents()
  3. का उपयोग कर विश्वसनीय एप्लिकेशन सूची
  4. SecAccessRef पास करें "उपरोक्त एपीआई के साथ कीचेन आइटम (ओं) को" इस आइटम तक पहुंचने के लिए सभी एप्लिकेशन को अनुमति दें "प्राप्त करने के लिए कुंजीचेन आइटम (0) बनाने के लिए
संबंधित मुद्दे

 संबंधित मुद्दे