2016-01-08 8 views
7

मैं एक प्रोजेक्ट पर काम कर रहा हूं जहां हम दूरस्थ रूप से कॉन्फ़िगरेशन प्रबंधन का उपयोग कर सॉफ़्टवेयर को तैनात कर रहे हैं, जिसमें से एक भाग विंडोज सर्वर पर पावरशेल स्क्रिप्ट प्रदान करता है, जिसे हमारे सेटअप और/या कॉन्फ़िगरेशन के कुछ हिस्सों को निष्पादित करने के लिए निष्पादित किया जाता है।गैर-विंडोज प्लेटफार्म पर पावरशेल स्क्रिप्ट साइन करें?

वर्तमान परिनियोजन विधि डिस्क पर स्क्रिप्ट लिखती है, लेकिन फ़ाइल हैंडल को बंद नहीं करती है। यह किसी भी अन्य प्रक्रिया को निष्पादित होने से पहले फ़ाइल के साथ छेड़छाड़ करने से रोकने के द्वारा स्क्रिप्ट को और अधिक "सुरक्षित" बनाने के लिए किया गया था। स्क्रिप्ट को चलाने के लिए, PowerShell को इसे stdin से पढ़ना चाहिए, क्योंकि यह एक स्क्रिप्ट नहीं चलाता है अगर इसे अनन्य एक्सेस नहीं मिल सकता है। आमंत्रण इस तरह कुछ दिखता है:

powershell.exe -Command - < C:\temp\some_name.ps1 

इसमें कई कमीएं हैं, मुख्य रूप से मैं स्क्रिप्ट को पैरामीटर पास नहीं कर सकता। इसके अतिरिक्त, stdin से बड़ी स्क्रिप्ट पढ़ने से खराब वर्ण, लाइन रिटर्न इत्यादि के साथ फंकी हो जाती है।

मैं स्क्रिप्ट को एक और पारंपरिक विधि में शामिल करना चाहता हूं, उदा।

powershell.exe -File C:\temp\some_name.ps1 -Param value ... 

लेकिन यह सुनिश्चित करने की भावना में भी ध्यान रखें कि इसे निष्पादित करने से पहले स्क्रिप्ट के साथ कुछ भी छेड़छाड़ नहीं कर सकता है। इसके लिए मैं पावरहेल स्क्रिप्ट पर हस्ताक्षर करना चाहता हूं और "AllSigned" निष्पादन नीति के साथ पावरहेल चला सकता हूं।

समस्या यह है कि मैं वास्तव में लक्ष्य सर्वर पर स्क्रिप्ट पर हस्ताक्षर नहीं कर सकता, क्योंकि इसमें पॉवरशेल स्क्रिप्ट चलाने के समान समस्या है ... मुझे PowerShell फ़ाइल पर हस्ताक्षर करने के लिए विशेष लॉक जारी करना होगा, लेकिन यह छेड़छाड़ हो सकता है।

मैंने तब फैसला किया कि अगर मैं उस सर्वर पर स्क्रिप्ट पर हस्ताक्षर कर सकता हूं जो इसे लक्ष्य मशीन पर पहुंचा रहा है जो बहुत बेहतर काम करेगा। हालांकि, हमारे कॉन्फ़िगरेशन प्रबंधन सॉफ़्टवेयर सर्वर सभी लिनक्स हैं, और मैं लिनक्स पर पावरशेल स्क्रिप्ट पर हस्ताक्षर करने का कोई तरीका ढूंढने की कोशिश कर रहा हूं। मोनो को प्रामाणिकोड के लिए समर्थन है, लेकिन बॉक्स के बाहर यह केवल exes और dlls के लिए है। मैंने PowerShell .NET फ़ंक्शन में खोदने का प्रयास किया है लेकिन पाया कि वे Cryptui.dll का उपयोग करते हैं, जो कि विंडोज-विशिष्ट है।

इस बिंदु पर मैं किसी भी तरह से पकड़ रहा हूं, मैं स्क्रिप्ट में हस्ताक्षर जोड़ सकता हूं, अन्यथा मुझे उन स्क्रिप्ट को चलाने के किसी अन्य तरीके से फ़ॉलबैक करना होगा जो वास्तव में मूल नहीं है। यदि संभव हो तो मैं स्क्रिप्ट के स्ट्रिंग प्रस्तुति पर हस्ताक्षर इन-मेमोरी की गणना करने में सक्षम होना चाहता हूं, लेकिन अगर मैं वह सब कुछ प्राप्त कर सकता हूं तो मैं एक फ़ाइल-आधारित विधि ले जाऊंगा।

+0

हमें प्रकाशन पर टेक्स्ट फाइलों पर हस्ताक्षर करना पड़ा और एक वीबीओक्स विंडोज वीएम (स्टार्टअप पर कॉपी की गई एक SHA हैश फ़ाइल फ़ाइल आधारित वॉल्यूम के साथ) का उपयोग किया, इसे बिल्ड मशीन पर स्पिन किया, और 'सेट-प्रामाणिकोड सिग्नेचर' को निष्पादित करने के लिए WinRb का उपयोग किया फाइलें, इसे बंद कर दें और फ़ाइल-आधारित वॉल्यूम कॉपी को फेंक दें ... वास्तव में बदसूरत है लेकिन यह वास्तव में अच्छी तरह से काम करता है ... आखिरकार इसे 'osslsigncode' – SushiHangover

+0

के कस्टम संस्करण के साथ बदल दिया गया था, मैं मोनो प्रामाणिकोड में डाइविंग कर रहा हूं कक्षाएं और मुझे लगता है कि मैंने एक संशोधित संस्करण बनाने के लिए पर्याप्त रूप से पता लगाया है जो stdin से डेटा पर काम करता है। मैंने सोचा कि मेरे पास मेरा कॉन्फ़िगरेशन प्रबंधन सॉफ़्टवेयर मोनो एक्सई का आह्वान करेगा, स्ट्रिंग पास करेगा, और फिर हस्ताक्षरित संस्करण के लिए stdout पढ़ें। हमारा कॉन्फ़िगरेशन प्रबंधन सॉफ़्टवेयर रूबी में मूल रूप से चलता है, इसलिए मैं मोनो कोड को दोहराने के लिए openssl लाइब्रेरी का उपयोग करके रूबी क्लास को आजमाने और बनाने का लुत्फ उठाता हूं। – AresonDeladious

+0

क्या आप अन्य खातों को लिखने के उपयोग से रोकने के लिए फ़ोल्डर सुरक्षा का उपयोग करके छेड़छाड़ नहीं कर सकते हैं, या वेब सर्वर पर स्क्रिप्ट को होस्ट करके 'ixx ((New-Object System.Net.WebClient) के साथ निष्पादित कर सकते हैं।) ': ('//myServer/myScript.ps1 https') DownloadString? आपको केवल अपनी हस्ताक्षर स्क्रिप्ट में इसकी आवश्यकता होगी, जो तब स्क्रिप्ट को वापस खींच सके और आवश्यकतानुसार साइन इन कर सके; जिसके बाद आप अपने विवरण के अनुसार उपयोग कर सकते हैं। – JohnLBevan

उत्तर

0

आपकी स्क्रिप्ट को .exe में संकलित करने के बारे में क्या?

ps2exe, या यहां तक ​​कि कुछ बिल्टिन .net कॉल आपके लिए भी ऐसा कर सकते हैं।

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