क्या मुझे स्वयं ओपन सोर्स कोड पर हस्ताक्षर करना चाहिए?


11

मैं macOS 10.14 का उपयोग करता हूं और एक समस्या के दौरान आया जब मैंने विम के लिए एक ओपन सोर्स प्लगइन स्थापित करने की कोशिश की जो मुझे जीथब पर मिली। मैंने स्रोत कोड डाउनलोड किया और इसे स्वयं संकलित किया, जिसने अच्छी तरह से काम किया, लेकिन जब मैंने इसे चलाया, तो निष्पादन बाधित हो गया क्योंकि "कोड हस्ताक्षर [निष्पादन योग्य] प्रक्रिया में उपयोग के लिए वैध नहीं था"।

इसने मुझे बहुत सारे प्रश्न दिए हैं जिन्हें मैं अपने सिर के चारों ओर लपेट नहीं सकता हूं:

मैं या तो इसे स्वयं हस्ताक्षर कर सकता था, लेकिन कोड हस्ताक्षर के उद्देश्य को बर्बाद नहीं कर सकता था? क्या इंटरनेट से कोड पर हस्ताक्षर करने और अज्ञात डेवलपर्स से ऐप्स की अनुमति देने में कोई गुणात्मक अंतर है "यह ऐप इंटरनेट" डायलॉग बॉक्स से डाउनलोड किया गया था?

अगर मैं ऐसा नहीं करता, तो हस्ताक्षर करना किसकी "जिम्मेदारी" है? रिपॉजिटरी मेंटेनर? योगदानकर्ताओं? क्या Apple को खुले स्रोत डेवलपर्स से हमेशा Apple डेवलपर आईडी की उम्मीद है? या क्या मैंने कोड साइनिंग के उद्देश्य को गलत समझा है?

संपादित करें:

स्पष्ट करने के लिए, मेरा प्रश्न यह है कि मुझे अहस्ताक्षरित स्रोत कोड को कैसे संभालना चाहिए जो मैं खुद को संकलित करता हूं, क्योंकि मुझे उम्मीद नहीं है कि योगदानकर्ता हमेशा सक्षम हो सकते हैं, या याद रखें, उनके कोड पर हस्ताक्षर करें, खासकर जब स्रोत स्रोत खोलने के लिए छोटे योगदान की बात आती है। कई योगदानकर्ताओं के साथ।

जवाबों:


9

एड-हॉक कोड साइनिंग

तीसरे पक्ष के अनुप्रयोगों और बायनेरिज़ के लिए, जो आप खुद को संकलित करते हैं, और जिसके लिए कोड हस्ताक्षर की आवश्यकता होती है , एक तदर्थ कोड हस्ताक्षर का उपयोग करें ।

  • मैं यह मान रहा हूं कि आवेदन बिना हस्ताक्षर के नहीं चलेगा;
  • मैं मान रहा हूं कि आवेदन वितरित नहीं किया जाएगा;
  • मैं मान रहा हूं कि आप हस्ताक्षर की वैधता की पहचान के बारे में परवाह नहीं करते हैं।

एक तदर्थ हस्ताक्षर विश्वसनीय सुरक्षा लाभ प्रदान नहीं करता है। इसका उपयोग यह निर्धारित करने के लिए किया जा सकता है कि क्या एप्लिकेशन को बदल दिया गया है और इसका उपयोग सुरक्षा प्रतिबंधों को लागू करने के लिए किया जा सकता है, जैसे कि एंटाइटेलमेंट, किसी एप्लिकेशन को।

एक तदर्थ हस्ताक्षर के खिलाफ मान्य होगा, codesignलेकिन नहीं spctl। बाइनरी पर हस्ताक्षर किए जाने के आधार पर यह बात हो भी सकती है और नहीं भी। अनुप्रयोगों और निष्पादन योग्यताओं के लिए, यह मायने नहीं रखता है क्योंकि spctlस्थानीय रूप से बनाए गए बायनेरिज़ पर नहीं चलाया जाता है।

कोड साइन क्यों?

परिष्कृत प्रश्न के बारे में:

मुझे अहस्ताक्षरित स्रोत कोड को कैसे संभालना चाहिए जो मैं खुद को संकलित करता हूं, क्योंकि मुझे उम्मीद नहीं है कि योगदानकर्ताओं को हमेशा सक्षम होना चाहिए, या उनके कोड को याद रखना चाहिए, खासकर जब यह कई योगदानकर्ताओं के साथ स्रोत परियोजनाओं को खोलने के लिए छोटे योगदान की बात आती है।

अधिकांश स्व संकलित अनुप्रयोगों के लिए, कोड हस्ताक्षर की कोई आवश्यकता नहीं है। यह मानता है कि आप एप्लिकेशन के कोड पर भरोसा करते हैं। MacOS पर, आप फाइंडर से अविशिष्ट अनुप्रयोग खोल सकते हैं, एक अज्ञात डेवलपर से ऐप्पल ओपन खोलें

यदि आप कोड या डेवलपर्स पर भरोसा नहीं करते हैं, तो एप्लिकेशन को संकलित या चलाएं नहीं।

आपका उत्तरदायित्व

स्रोत कोड के प्रदाता के पास पूर्व-निर्मित कोड हस्ताक्षरित बायनेरिज़ प्रदान करने के लिए कोई जिम्मेदारी या दायित्व नहीं है। स्वयं संकलित होने के नाते, सभी कोड हस्ताक्षर आपकी पसंद और जिम्मेदारी है।

  • Apple को कोड हस्ताक्षर करने के लिए अपने ऐप स्टोर में सबमिशन की आवश्यकता होती है

  • ऐप्पल ऐप स्टोर के बाहर डेवलपर्स अनुरोध करते हैं कि वे अपने कोड पर हस्ताक्षर करें, लेकिन यह अभी तक आवश्यक नहीं है।

दोनों ही मामलों में, केवल अंतिम बायनेरिज़ पर हस्ताक्षर किए जाते हैं। मूल स्रोत कोड और संसाधनों पर हस्ताक्षर नहीं किए गए हैं।

स्रोत कोड हस्ताक्षरित नहीं है

स्रोत कोड स्वयं macOS के लिए सार्थक तरीके से हस्ताक्षरित कोड नहीं हो सकता है। स्रोत फ़ाइलों और कोड को डिजिटल रूप से हस्ताक्षरित किया जा सकता है, जैसा कि किसी भी अन्य फ़ाइल में हो सकता है, लेकिन यह इस बात पर कोई प्रभाव नहीं डालता है कि परिणामी एप्लिकेशन या बाइनरी को macOS द्वारा कैसे व्यवहार किया जाता है।

एड-हॉक कोड कैसे एक मैक एप्लीकेशन पर हस्ताक्षर करें

एक तदर्थ हस्ताक्षर के साथ macOS पर किसी एप्लिकेशन को कोड करने के लिए, पहचान -sध्वज को इस पर सेट करें -:

codesign --force -s - </path/to/application>

codesignकमांड के अन्य सभी नियम, आवश्यकताएं और क्रमबद्धताएं समान हैं।

--forceकिसी भी मौजूदा हस्ताक्षर को अधिलेखित करने के लिए ध्वज का उपयोग यहां किया जाता है।

आपको उप-संसाधनों जैसे चौखटे और एम्बेडेड सेवाओं पर हस्ताक्षर --deepकरने के लिए ध्वज को codesignकमांड में जोड़ने की आवश्यकता हो सकती है ।


आप तदर्थ हस्ताक्षरों की सिफारिश क्यों करते हैं? उत्तर जो आपने राज्यों से जोड़ा है "व्यवहार में तदर्थ हस्ताक्षरित बायनेरिज़ बनाने के लिए केवल Apple डेवलपर्स के लिए व्यावहारिक मूल्य है"।
Wowfunhappy

इससे मुझे कोई मतलब नहीं है। एक तदर्थ हस्ताक्षर जोड़ने का मतलब है कि हस्ताक्षर सत्यापन विफल हो जाएगा। यह आपको कहीं भी नहीं मिलता है - प्रोग्राम ठीक उसी त्रुटि संदेश के साथ विफल हो जाएगा।
jksoegaard

हां, मैं देख रहा हूं कि आपने ऐड-हॉक साइनिनिग पर मेरे उत्तर के लिंक को हटा दिया, और मान्यताओं को जोड़ दिया। लेकिन क्या ये धारणाएँ पूरी पकड़ रखती हैं? - आपको लगता है जैसे कि सवाल एक आवेदन को चलाने के बारे में है। यह नहीं। यह एक पहले से ही हस्ताक्षरित एप्लिकेशन होने के बारे में है जिसे ओपी एक प्लगइन जोड़ना चाहता है। अर्थात् प्लगइन को मूल रूप से हस्ताक्षरित एप्लिकेशन (विम) के साथ पुस्तकालय सत्यापन पास करने की आवश्यकता है।
jksoegaard

मूल प्रश्न संपादित किया गया है। यह जैसा है वैसा व्यापक है। प्रश्नकर्ता इन उत्तरों को टिप्पणी कर सकता है, स्पष्ट कर सकता है और देख सकता है कि ये उत्तर उनके लिए क्या काम करते हैं। यह उत्तर संपादित प्रश्न का उत्तर देने और व्यावहारिक दृष्टिकोण प्रदान करने का प्रयास करता है। यदि यह मदद नहीं करता है, या गलत धारणाएं हैं, तो प्रश्नकर्ता उम्मीद में झंकार कर सकता है और अपनी मंशा को स्पष्ट कर सकता है।
ग्राहम मिलन

1
यह उत्तर सहायक था। मेरा प्रश्न काफी सामान्य था क्योंकि मुझे लगता है कि ऐप्पल डॉक्स को समझना थोड़ा कठिन है। एड-हॉक साइनिंग के उपयोग से मेरे पास मौजूद विशिष्ट समस्या हल हो गई।
Syntaxén

5

कार्यक्रम पर हस्ताक्षर करना स्वयं कोड हस्ताक्षर करने के उद्देश्य को बर्बाद नहीं कर रहा है। कोड हस्ताक्षर करने का सामान्य उद्देश्य यह सत्यापित करना संभव है कि कार्यक्रम एक असंबद्ध प्रतिलिपि है जो मूल रूप से एक विशिष्ट संस्था (व्यक्ति या कंपनी) द्वारा बनाई गई थी। जब आप किसी प्रोग्राम को केवल अपने कंप्यूटर पर चलाने के लिए साइन इन करते हैं, तो आप सिस्टम के लिए यह जांचना संभव बनाते हैं कि यह वास्तव में है जो आपने बाइनरी बनाया है, और यह कि इसे दूसरों द्वारा संशोधित नहीं किया गया है।

आवेदन द्विआधारी खुद पर हस्ताक्षर करने के बीच गुणात्मक अंतर, और गेटकीपर में अज्ञात डेवलपर्स से सिर्फ एप्लिकेशन को अनुमति देना यह है कि पूर्व मामले में आप एक एकल, विशिष्ट एप्लिकेशन को चलाने की अनुमति देते हैं - जबकि बाद वाला, आप इस संभावना के लिए खोलते हैं कि आप बहुत सारे खोल सकते हैं अलग-अलग ऐप बस उन पर राइट-क्लिक करके और ओपन चुनें। यानी यह विशिष्ट कार्यक्रम पर हस्ताक्षर करके अधिक प्रतिबंधात्मक है और इस प्रकार कुछ हद तक "सुरक्षित" है।

हस्ताक्षर करने की जिम्मेदारी पूरी तरह आपकी है। खुला स्रोत डेवलपर स्रोत कोड पर हस्ताक्षर नहीं कर सकता - केवल संकलित बायनेरिज़ पर हस्ताक्षर करना संभव है। जैसा कि आप खुद संकलित बायनेरिज़ का निर्माण कर रहे हैं, यह आपको उन पर हस्ताक्षर करने के लिए पड़ता है।

आप Apple की वेब साइट पर एक डेवलपर खाते के लिए साइन अप कर सकते हैं जो आपको एक प्रमाण पत्र बनाने की अनुमति देगा जिसका उपयोग हस्ताक्षर करने के लिए किया जा सकता है। यदि आप एक डेवलपर हैं और नियमित रूप से मैक्रों पर चलने के लिए बायनेरिज़ का संकलन कर रहे हैं तो यह काम करने का पसंदीदा तरीका है। यदि यह एक बंद चीज है जिसे आप शायद कभी दोबारा नहीं करेंगे, तो संभवतः इस प्रक्रिया से गुजरना अधिक कठिन है। YMMV।

यहां आपके प्रश्न के अन्य उत्तर यह अनुशंसा करते हैं कि आप अपने बाइनरी के लिए तदर्थ हस्ताक्षर का उपयोग करें। यह काम नहीं करेगा। गेटकीपर के साथ बाइनरी रन को उसकी सबसे सुरक्षित सेटिंग के लिए आपको एक वैध हस्ताक्षर बनाने की आवश्यकता होगी।


1

क्या मुझे स्वयं ओपन सोर्स कोड पर हस्ताक्षर करना चाहिए?

यदि आप डेवलपर नहीं हैं, तो नहीं।

कोड हस्ताक्षर, संक्षेप में, आपको (डेवलपर) कहने का एक तरीका है जो आप कहते हैं कि आप हैं और जब आपने अंतिम बार हस्ताक्षर किया था तब कोड नहीं बदला है।

क्या इंटरनेट से कोड पर हस्ताक्षर करने और अज्ञात डेवलपर्स से ऐप्स की अनुमति देने में कोई गुणात्मक अंतर है "यह ऐप इंटरनेट" डायलॉग बॉक्स से डाउनलोड किया गया था?

ऐसा लगता है कि आपके भ्रमित कोड साइनिंग (डेवलपर्स को ऐप स्टोर पर ऐप्स प्रकाशित करने के लिए क्या आवश्यक है) और गेटकीपर (अज्ञात डेवलपर्स से सॉफ़्टवेयर स्थापित करने से आपके मैक को बचाता है)।

यदि आप अपने मैक को ऐप स्टोर और पहचाने गए डेवलपर्स दोनों से सॉफ़्टवेयर स्थापित करने की अनुमति देते हैं, तो आपको अभी भी पॉपअप आपको इस तथ्य से सचेत करेगा कि सॉफ़्टवेयर स्थापित हो जाएगा

और अगर यह एक अज्ञात डेवलपर से है, तो आपको "चेतावनी आइकन" के साथ समान पॉपअप मिलेगा

आप अभी भी सॉफ़्टवेयर इंस्टॉल कर सकते हैं। यह सिर्फ एक तंत्र है जो उपयोगकर्ता के इंटरैक्शन को वास्तव में सॉफ़्टवेयर स्थापित करने के लिए मजबूर करता है जो आपको स्व-इंस्टॉल किए गए मैलवेयर के खिलाफ सुरक्षा की एक परत प्रदान करता है।


धन्यवाद, यह कुछ सवालों के जवाब नहीं बल्कि कुछ का जवाब देता है। मैंने अपने प्रश्न को संपादित किया है कि मैं जो कुछ पूछ रहा हूं, उसमें अधिक विशिष्ट होने की कोशिश करने के लिए
Syntaxén
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.