प्रश्न :मैं लिनक्स वातावरण पर अपनी बैश शेल स्क्रिप्ट को कैसे एन्क्रिप्ट करूं? शेल स्क्रिप्ट में पासवर्ड होता है, और मैं नहीं चाहता कि जिन अन्य लोगों के पास शेल स्क्रिप्ट देखने और पासवर्ड प्राप्त करने के लिए एक्ज़ीक्यूट एक्सेस हो। क्या मेरी शेल स्क्रिप्ट को एन्क्रिप्ट करने का कोई तरीका है?
A: सबसे पहले, सर्वोत्तम अभ्यास के रूप में आपको अपनी शेल स्क्रिप्ट को एन्क्रिप्ट नहीं करना चाहिए। आपको वास्तव में अपनी शेल स्क्रिप्ट को ठीक से दस्तावेज करना चाहिए ताकि जो कोई भी इसे देखता है वह समझ सके कि यह क्या करता है। यदि इसमें पासवर्ड जैसी संवेदनशील जानकारी है, तो आपको शेल स्क्रिप्ट को एन्क्रिप्ट किए बिना लिखने के लिए एक अलग दृष्टिकोण का पता लगाना चाहिए।
कहा जा रहा है, यदि आप अभी भी शेल स्क्रिप्ट को एन्क्रिप्ट करने पर जोर देते हैं, तो आप नीचे बताए अनुसार SHC उपयोगिता का उपयोग कर सकते हैं। कृपया ध्यान दें कि shc द्वारा बनाई गई एन्क्रिप्टेड शेल स्क्रिप्ट सामान्य उपयोगकर्ताओं द्वारा पठनीय नहीं है। हालांकि कोई व्यक्ति जो समझता है कि यह कैसे काम करता है, मूल शेल स्क्रिप्ट को shc द्वारा बनाई गई एन्क्रिप्टेड बाइनरी से निकाल सकता है।
SHC,शेल स्क्रिप्ट कंपाइलर के लिए खड़ा है।
<एच3>1. shc डाउनलोड करें और इसे इंस्टॉल करेंshc डाउनलोड करें और इसे नीचे दिखाए अनुसार इंस्टॉल करें।
# wget https://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz # tar xvfz shc-3.8.7.tgz # cd shc-3.8.7 # make
सत्यापित करें कि shc ठीक से स्थापित है।
$ ./shc -v shc parse(-f): No source file specified shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script<एच3>2. एक नमूना शैल स्क्रिप्ट बनाएं
एक नमूना बैश शेल स्क्रिप्ट बनाएं जिसे आप परीक्षण के उद्देश्य से shc का उपयोग करके एन्क्रिप्ट करना पसंद करते हैं।
परीक्षण के उद्देश्य के लिए, हम निम्नलिखित random.sh शेल स्क्रिप्ट बनाते हैं जो यादृच्छिक संख्याएँ उत्पन्न करती है। आपको यह निर्दिष्ट करना होगा कि आप कितनी यादृच्छिक संख्याएँ उत्पन्न करना चाहते हैं।
<केंद्र> केंद्र>$ vi random.sh #!/bin/bash echo -n "How many random numbers do you want to generate? " read max for (( start = 1; start <= $max; start++ )) do echo -e $RANDOM done $ ./random.sh How many random numbers do you want to generate? 3 24682 1678 491<एच3>3. Shc का उपयोग करके शेल स्क्रिप्ट को एन्क्रिप्ट करें
जैसा कि नीचे दिखाया गया है, shc का उपयोग करके random.sh शेल स्क्रिप्टिंग को एन्क्रिप्ट करें।
$ ./shc -f random.sh
यह निम्नलिखित दो फ़ाइलें बनाएगा:
$ ls -l random.sh* -rwxrw-r--. 1 ramesh ramesh 149 Mar 27 01:09 random.sh -rwx-wx--x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x -rw-rw-r--. 1 ramesh ramesh 10174 Mar 27 01:12 random.sh.x.c
- random.sh मूल अनएन्क्रिप्टेड शेल स्क्रिप्ट है
- random.sh.x बाइनरी प्रारूप में एन्क्रिप्टेड शेल स्क्रिप्ट है
- random.sh.x.c, random.sh फ़ाइल का सी स्रोत कोड है। यह सी स्रोत कोड उपरोक्त एन्क्रिप्टेड random.sh.x फ़ाइल बनाने के लिए संकलित किया गया है। Shc के पीछे पूरा तर्क random.sh शेल स्क्रिप्ट को random.sh.x.c C प्रोग्राम में बदलना है (और निश्चित रूप से इसे random.sh.x निष्पादन योग्य बनाने के लिए संकलित करना)
$ file random.sh random.sh: Bourne-Again shell script text executable $ file random.sh.x random.sh.x: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped $ file random.sh.x.c random.sh.x.c: ASCII C program text<एच3>4. एन्क्रिप्टेड शेल स्क्रिप्ट निष्पादित करें
अब, यह सुनिश्चित करने के लिए एन्क्रिप्टेड शेल स्क्रिप्ट निष्पादित करें कि यह अपेक्षित रूप से काम करता है।
$ ./random.sh.x How many random numbers do you want to generate? 3 7489 10494 29627
कृपया ध्यान दें कि स्क्रिप्ट को निष्पादित करने के लिए बाइनरी स्वयं अभी भी शेल पर निर्भर है (random.sh. यानी /bin/bash में प्रदान की गई पहली पंक्ति)।
5. आपकी शेल स्क्रिप्ट के लिए समाप्ति तिथि निर्दिष्ट करना
Shc का उपयोग करके आप एक समाप्ति तिथि भी निर्दिष्ट कर सकते हैं। यानी इस समाप्ति तिथि के बाद जब कोई शेल स्क्रिप्ट निष्पादित करने का प्रयास करता है, तो उन्हें एक त्रुटि संदेश मिलेगा।
मान लें कि आप नहीं चाहते कि कोई भी 31-दिसंबर-2011 के बाद random.sh.x निष्पादित करे (मैंने परीक्षण के उद्देश्य के लिए पिछले वर्ष की तारीख का उपयोग किया था)।
समाप्ति तिथि निर्दिष्ट करने के लिए "shc -e" विकल्प का उपयोग करके एक नई एन्क्रिप्टेड शेल स्क्रिप्ट बनाएं। समाप्ति तिथि dd/mm/yyyy प्रारूप में निर्दिष्ट है।
$ ./shc -e 31/12/2011 -f random.sh
इस उदाहरण में, यदि कोई व्यक्ति 31-दिसंबर-2011 के बाद random.sh.x को निष्पादित करने का प्रयास करता है, तो उसे एक डिफ़ॉल्ट समाप्ति संदेश प्राप्त होगा जैसा कि नीचे दिखाया गया है।
$ ./random.sh.x ./random.sh.x: has expired! Please contact your provider
यदि आप अपना स्वयं का कस्टम समाप्ति संदेश निर्दिष्ट करना चाहते हैं, तो -m विकल्प का उपयोग करें (-e विकल्प के साथ जैसा कि नीचे दिखाया गया है)।
$ ./shc -e 31/12/2011 -m "Contact [email protected] for new version of this script" -f random.sh $ ./random.sh.x ./random.sh.x: has expired! Contact [email protected] for new version of this script<एच3>6. पुनर्वितरण योग्य एन्क्रिप्टेड शेल स्क्रिप्ट बनाएं
-e, और -m (समाप्ति के लिए) के अलावा, आप निम्न विकल्पों का भी उपयोग कर सकते हैं:
- -r एक पुनर्वितरण योग्य बाइनरी बनाने के लिए सुरक्षा को शिथिल करेगा जो अन्य सिस्टम पर निष्पादित होता है जो उसी ऑपरेटिंग सिस्टम को चलाता है जिस पर इसे संकलित किया गया था।
- -T स्ट्रेस, ltrace, आदि जैसे प्रोग्राम का उपयोग करके बनाई गई बाइनरी फ़ाइलों को ट्रेस करने योग्य बनाने की अनुमति देगा।
- -v क्रिया के लिए है
आमतौर पर आप नीचे दिखाए गए अनुसार पुनर्वितरण योग्य और पता लगाने योग्य शेल एन्क्रिप्टेड शेल स्क्रिप्ट बनाने के लिए -r और -T दोनों विकल्प का उपयोग करना चाह सकते हैं।
$ ./shc -v -r -T -f random.sh shc shll=bash shc [-i]=-c shc [-x]=exec '%s' "$@" shc [-l]= shc opts= shc: cc random.sh.x.c -o random.sh.x shc: strip random.sh.x shc: chmod go-r random.sh.x $ ./random.sh.x How many random numbers do you want to generate? 3 28954 1410 15234
अंत में, यह फिर से दोहराने लायक है:आपको अपनी शेल स्क्रिप्ट को पहले स्थान पर एन्क्रिप्ट नहीं करना चाहिए। लेकिन, यदि आपने shc का उपयोग करके अपनी शेल स्क्रिप्ट को एन्क्रिप्ट करने का निर्णय लिया है, तो कृपया याद रखें कि एक स्मार्ट व्यक्ति अभी भी shc द्वारा बनाई गई एन्क्रिप्टेड बाइनरी से मूल शेल स्क्रिप्ट उत्पन्न कर सकता है।