কম্পিউটার টিউটোরিয়াল

লিনাক্সে বাশ স্ক্রিপ্ট সিকিউর করুন: SHC দিয়ে সেনসিটিভ ডেটা এনক্রিপ্ট করুন

প্রশ্ন: লিনাক্স এনভায়রনমেন্টে আমার বাশ শেল স্ক্রিপ্ট কীভাবে এনক্রিপ্ট করব? শেল স্ক্রিপ্টে পাসওয়ার্ড আছে, এবং আমি চাই না যে যারা এক্সিকিউট অ্যাক্সেস রাখে তারা স্ক্রিপ্টটি দেখে পাসওয়ার্ড পায়। আমার শেল স্ক্রিপ্ট এনক্রিপ্ট করার কোনো উপায় আছে কি?

উত্তর: প্রথমে, সেরা অভ্যাস হিসেবে আপনাকে আপনার শেল স্ক্রিপ্ট এনক্রিপ্ট করা উচিত নয়। আপনার শেল স্ক্রিপ্টটি সঠিকভাবে ডকুমেন্ট করা উচিত যাতে কেউ এটা দেখলে বুঝতে পারে এটা কী করে। যদি এতে পাসওয়ার্ডের মতো সেনসিটিভ ইনফরমেশন থাকে, তবে আপনাকে স্ক্রিপ্ট লিখার একটি ভিন্ন পদ্ধতি খুঁজে বের করা উচিত যাতে এনক্রিপ্ট করার প্রয়োজন না পড়ে।

কিন্তু, যদি আপনি всё равно শেল স্ক্রিপ্ট এনক্রিপ্ট করার ওপর আগ্রহী হন, তবে নিচে ব্যাখ্যা অনুযায়ী SHC ইউটিলিটি ব্যবহার করতে পারেন। দ্রষ্টব্য যে, SHC দিয়ে তৈরি এনক্রিপ্টেড শেল স্ক্রিপ্ট সাধারণ ইউজাররা পড়তে পারেন না। যাইহোক, কেউ যেনে এই পদ্ধতি কীভাবে কাজ করে সে অরিজিনাল শেল স্ক্রিপ্টটি SHC-র তৈরি বাইনারি থেকে এক্সট্রাক্ট করতে পারে।

SHC মানে শেল স্ক্রিপ্ট কম্পাইলার।

১. 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

২. একটি স্যাম্পল শেল স্ক্রিপ্ট তৈরি করুন

একটি স্যাম্পল বাশ শেল স্ক্রিপ্ট তৈরি করুন যা আপনি 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

৩. SHC দিয়ে শেল স্ক্রিপ্ট এনক্রিপ্ট করুন

নিচের মত করে random.sh শেল স্ক্রিপ্টটি SHC দিয়ে এনক্রিপ্ট করুন:

$ ./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

৪. এনক্রিপ্টেড শেল স্ক্রিপ্ট এক্সিকিউট করুন

এখন, এনক্রিপ্টেড শেল স্ক্রিপ্টটি এক্সিকিউট করি যাতে এটি প্রত্যাশা অনুযায়ী কাজ করে কিনা যাচাই করা যায়।

$ ./random.sh.x How many random numbers do you want to generate? 3 7489 10494 29627

দ্রষ্টব্য যে, বাইনারিটি всё শেলের ওপর ডিপেন্ডেন্ট (যা random.sh-এ প্রথম লাইনে দেওয়া আছে, যেমন /bin/bash) যাতে স্ক্রিপ্ট এক্সিকিউট করতে পারে।

৫. আপনার শেল স্ক্রিপ্টের জন্য এক্সপিরেশন ডেট স্পেসিফাই করুন

SHC ব্যবহার করে আপনি একটি এক্সপিরেশন ডেটও স্পেসিফাই করতে পারেন। অর্থাৎ, এই এক্সপিরেশন ডেটের পর কেউ যদি শেল স্ক্রিপ্ট এক্সিকিউট করতে চায়, তবে তাকে একটি এরর মেসেজ मिलবে।

ধরুন, আপনি চান কেউ random.sh.x ৩১-ডিসেম্বর-২০১১-এর পর এক্সিকিউট করতে না পারে (টেস্টিং এর জন্য গত বছরের ডেট ব্যবহার করলাম)।

shc -e অপশন ব্যবহার করে একটি নতুন এনক্রিপ্টেড শেল স্ক্রিপ্ট তৈরি করুন এক্সপিরেশন ডেট স্পেসিফাই করার জন্য। এক্সপিরেশন ডেট dd/mm/yyyy ফরম্যাটে দেওয়া হয়।

$ ./shc -e 31/12/2011 -f random.sh

এই উদাহরণে, যদি কেউ ৩১-ডিসেম্বর-২০১১-এর পর 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

৬. রিডিস্ট্রিবিউটেবল এনক্রিপ্টেড শেল স্ক্রিপ্ট তৈরি করুন

-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-র দ্বারা তৈরি হয়েছে, অরিজিনাল শেল স্ক্রিপ্টটি এখনও জেনারেট করতে পারে।

  1. লিনাক্সে সিম্পল শেল স্ক্রিপ্ট মাস্টার করুন: ধাপে ধাপে গাইড

  2. উইন্ডোজ ১০-এ WSL দিয়ে Bash ইনস্টল ও ব্যবহার: ধাপে ধাপে টিউটোরিয়াল

  3. উইন্ডোজ ১০-এ লিনাক্স ব্যাশ শেল ইনস্টল করুন: সম্পূর্ণ ধাপে ধাপে গাইড

  4. ১০টি প্রফেশনাল PS1 কাস্টমাইজেশন আপনার লিনাক্স ব্যাশ প্রম্পট উন্নত করার জন্য