प्रश्न: मैं Linux वातावरण में अपने बैश शेल स्क्रिप्ट को कैसे एन्क्रिप्ट करूं? शेल स्क्रिप्ट में पासवर्ड है, और मैं नहीं चाहता कि जिनके पास एक्जीक्यूट एक्सेस है वे शेल स्क्रिप्ट देखें और पासवर्ड प्राप्त करें। क्या मेरे शेल स्क्रिप्ट को एन्क्रिप्ट करने का कोई तरीका है?
उत्तर: पहली बात, सर्वोत्तम अभ्यास के रूप में आपको अपने शेल स्क्रिप्ट को एन्क्रिप्ट नहीं करना चाहिए। आपको वास्तव में अपने शेल स्क्रिप्ट को ठीक से दस्तावेज करना चाहिए ताकि जो कोई भी इसे देखे वह ठीक से समझे कि यह क्या करता है। यदि इसमें पासवर्ड जैसी संवेदनशील जानकारी है, तो आपको शेल स्क्रिप्ट को एन्क्रिप्ट किए बिना लिखने का एक अलग दृष्टिकोण निकालना चाहिए।
कहा जा रहा है, यदि आप अभी भी शेल स्क्रिप्ट को एन्क्रिप्ट करने पर जोर देते हैं, तो आप नीचे बताए अनुसार SHC यूटिलिटी का उपयोग कर सकते हैं। कृपया ध्यान दें कि shc द्वारा बनाया गया एन्क्रिप्टेड शेल स्क्रिप्ट सामान्य उपयोगकर्ताओं द्वारा पठनीय नहीं है। हालांकि कोई व्यक्ति जो समझता है कि यह कैसे काम करता है, वह shc द्वारा बनाए गए एन्क्रिप्टेड बाइनरी से मूल शेल स्क्रिप्ट निकाल सकता है।
SHC का मतलब शेल स्क्रिप्ट कंपाइलर है।
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
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. 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 फ़ाइल का C सोर्स कोड है। यह C सोर्स कोड ऊपर दिए गए एन्क्रिप्टेड 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
4. एन्क्रिप्टेड शेल स्क्रिप्ट निष्पादित करें
अब, आइए एन्क्रिप्टेड शेल स्क्रिप्ट को निष्पादित करें ताकि यह सुनिश्चित हो सके कि यह अपेक्षा के अनुरूप काम करता है।
$ ./random.sh.x How many random numbers do you want to generate? 3 7489 10494 29627
कृपया ध्यान दें कि बाइनरी अभी भी शेल पर निर्भर है (random.sh में प्रदान की गई पहली लाइन। यानी /bin/bash) निष्पादित करने के लिए स्क्रिप्ट के लिए उपलब्ध होना चाहिए।
5. अपने शेल स्क्रिप्ट के लिए समाप्ति तिथि निर्दिष्ट करना
shc का उपयोग करके आप एक समाप्ति तिथि भी निर्दिष्ट कर सकते हैं। यानी इस समाप्ति तिथि के बाद जब कोई शेल स्क्रिप्ट को निष्पादित करने का प्रयास करता है, तो उन्हें एक त्रुटि संदेश मिलेगा।
मान लें कि आप नहीं चाहते कि कोई 31-Dec-2011 के बाद random.sh.x को निष्पादित करे (मैंने परीक्षण उद्देश्य के लिए पिछले साल की तारीख का उपयोग किया)।
"shc -e" विकल्प का उपयोग करके समाप्ति तिथि निर्दिष्ट करने के लिए एक नया एन्क्रिप्टेड शेल स्क्रिप्ट बनाएं। समाप्ति तिथि dd/mm/yyyy फॉर्मेट में निर्दिष्ट की जाती है।
$ ./shc -e 31/12/2011 -f random.sh
इस उदाहरण में, यदि कोई 31-Dec-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 admin@thegeekstuff.com for new version of this script" -f random.sh $ ./random.sh.x ./random.sh.x: has expired! Contact admin@thegeekstuff.com for new version of this script
6. पुनर्वितरण योग्य एन्क्रिप्टेड शेल स्क्रिप्ट बनाएं
-e, और -m (समाप्ति के लिए) के अलावा, आप निम्नलिखित विकल्पों का भी उपयोग कर सकते हैं:
- -r सुरक्षा को आराम देगा ताकि एक पुनर्वितरण योग्य बाइनरी बनाया जा सके जो उसी ऑपरेटिंग सिस्टम पर चलने वाले अन्य सिस्टम पर निष्पादित हो सके जिस पर इसे संकलित किया गया था।
- -T बनाए गए बाइनरी फ़ाइलों को strace, 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 द्वारा बनाए गए एन्क्रिप्टेड बाइनरी से मूल शेल स्क्रिप्ट उत्पन्न कर सकता है।