मैंने सफारी का उपयोग करके इंटरनेट से एक ऐप डाउनलोड किया। इसे अंजाम देने पर, macOS यह सूचित करता है कि ऐप किसी अज्ञात डेवलपर का है।
MacOS इस जानकारी को कैसे निर्धारित कर सकता है? किसी एप्लिकेशन के लिए हस्ताक्षरित मेटाडेटा कहाँ संग्रहीत किया जाता है?
मैंने सफारी का उपयोग करके इंटरनेट से एक ऐप डाउनलोड किया। इसे अंजाम देने पर, macOS यह सूचित करता है कि ऐप किसी अज्ञात डेवलपर का है।
MacOS इस जानकारी को कैसे निर्धारित कर सकता है? किसी एप्लिकेशन के लिए हस्ताक्षरित मेटाडेटा कहाँ संग्रहीत किया जाता है?
जवाबों:
जानकारी को विस्तारित विशेषताओं में संग्रहीत किया जाता है, अतिरिक्त जानकारी के साथ संभावित रूप से एक एप्लिकेशन के भीतर एम्बेडेड होता है।
यह संगरोध जानकारी एक विस्तारित विशेषता के रूप में संग्रहीत है । xattr
फ़ाइल या एप्लिकेशन से जुड़ी विशेषताओं को देखने के लिए टूल का उपयोग करें ।
इस संदेश के कारण विशेषता है com.apple.quarantine
।
देखें कि मैं मैक ओएस एक्स में एक फ़ाइल पर "विस्तारित विशेषताओं" को कैसे निकालूं? और ऐप को खोला नहीं जा सकता क्योंकि यह अधिक विवरण के लिए अज्ञात डेवलपर से है ।
विस्तारित विशेषता का उपयोग गेटकॉकर द्वारा macOS पर किया जाता है और इस पर चर्चा की जाती है कि कैसे com.apple.quarantine विशेषता को सेट करें (पुनर्स्थापित करें)?
किसी एप्लिकेशन के भीतर एम्बेडेड वैकल्पिक डिजिटल हस्ताक्षर का उपयोग एप्लिकेशन के डेवलपर को निर्धारित करने के लिए किया जाता है। यदि कोई हस्ताक्षर नहीं मिलता है, तो macOS एक अज्ञात डेवलपर से होने के नाते आवेदन प्रस्तुत करता है।
वास्तव में संदेश "अज्ञात डेवलपर ..." दोनों कार्यों के संयोजन का परिणाम है: com.apple.quarantine विशेषता की जाँच करना और कोड पर हस्ताक्षर करने के संसाधन (* / सामग्री / _CodeSignature / CodeResources) जबकि वास्तविक हस्ताक्षर स्थिति है पूरी तरह से * / CodeResources द्वारा निर्धारित ।
आप प्रवेश करके विस्तारित विशेषता प्राप्त कर सकते हैं:
$ xattr -p com.apple.quarantine /Applications/*.app
प्रवेश करने वाली जानकारी पर हस्ताक्षर करने वाला कोड दर्ज करके पहुँचा जाता है:
$ codesign -dvvv /Applications/*.app
उदाहरण:
$ codesign -dvvvv /Applications/Google\ Chrome.app/
Executable=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
Identifier=com.google.Chrome
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=273 flags=0x800(restrict) hashes=3+3 location=embedded
OSPlatform=36
OSSDKVersion=658432
OSVersionMin=657664
Hash type=sha256 size=32
CandidateCDHash sha1=bc8e3dffe7d9d5242e09ea80a220ed365d46fdf2
CandidateCDHash sha256=d7ae6211906bb17d593ce9c215d190a81f37e658
Hash choices=sha1,sha256
Page size=4096
CDHash=d7ae6211906bb17d593ce9c215d190a81f37e658
Signature size=8949
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=20. Mar 2018 at 07:23:20
Info.plist entries=36
TeamIdentifier=EQHXZ8M8AV
Sealed Resources version=2 rules=7 files=203
Internal requirements count=1 size=240
सबसे महत्वपूर्ण हिस्सा प्रमाणपत्र श्रृंखला (और विश्वास की श्रृंखला) है:
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
यहां तीन अलग-अलग प्राधिकरण दिखाई दे रहे हैं:
इसका मतलब यह है कि ऐप को एक डेवलपर प्रमाण पत्र के साथ हस्ताक्षरित किया गया है, जिसे Apple के मध्यवर्ती डेवलपर प्राधिकरण द्वारा प्रकाशित और हस्ताक्षरित किया गया है, जो कि स्वयं ही रूट प्रबंधक द्वारा प्रकाशित और हस्ताक्षरित है।
यह श्रृंखला Google (या अधिक सटीक रूप से: टीम / इकाई Google, Inc. (EQHXZ8M8AV)) को Apple पहचाने गए डेवलपर के रूप में योग्य बनाती है।
आप स्वयं या किसी अन्य मध्यवर्ती / रूट प्राधिकारी से एक कोडिंग प्रमाण पत्र के साथ कोड्स को भी असाइन कर सकते हैं लेकिन यह गेटकीपर को मात नहीं देगा।
अब चार क्रमपरिवर्तन संभव है कि गेटकीपर सक्षम है (लेकिन स्व-हस्ताक्षर / एलियन-हस्ताक्षर पर विचार नहीं कर रहा है):
पहले दो मामलों में ऐप बस लॉन्च होगा। तीसरे मामले में आपको Unindentified Developer मैसेज मिलेगा । आप विस्तारित विशेषता xattr -d com.apple.quarantine *
(= केस 1) को हटाकर इसे हल कर सकते हैं । चौथे मामले में आपको "इंटरनेट से डाउनलोड किया गया था, क्या आप वाकई इसे खोलना चाहते हैं?"
MacOS इस जानकारी को कैसे निर्धारित कर सकता है? किसी एप्लिकेशन के लिए हस्ताक्षरित मेटाडेटा कहाँ संग्रहीत किया जाता है?
एप्लिकेशन बाइनरी (फ़ाइल में Contents/_CodeSignature/CodeResources
) में कुछ अतिरिक्त डेटा के साथ हस्ताक्षर को एप्लिकेशन बाइनरी में ही संग्रहीत किया जाता है ।
आप कमांड लाइन उपयोगिता का उपयोग करके हस्ताक्षर पर कुछ जानकारी प्राप्त कर सकते हैं codesign
- उदाहरण के लिए:
# codesign -dv /Applications/Preview.app
Executable=/Applications/Preview.app/Contents/MacOS/Preview
Identifier=com.apple.Preview
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20100 size=21314 flags=0x0(none) hashes=659+5 location=embedded
Platform identifier=4
Signature size=4485
Info.plist entries=35
TeamIdentifier=not set
Sealed Resources version=2 rules=13 files=2077
Internal requirements count=1 size=68