আমি একটি নোটবুক দিয়ে শুরু করেছিলাম। কোনো টেক্সট এডিটর বা মার্কডাউন ফাইল নয়, বরং একটি স্পাইরাল-বাঁধানো কাগজের নোটবুক যা এমন সব কমান্ডে ঠাসা যা আমি বুঝতাম না। আমি ls, grep, find, chmod, এবং nmap লিখে রেখেছিলাম। আমি একের পর এক পাতায় সিনট্যাক্স সাজিয়ে রাখতাম, যেন Linux এবং cybersecurity হলো কোনো ভোকাবুলারি টেস্ট, এবং আমি যদি অন্য কারো চেয়ে বেশি ফ্ল্যাগ (flags) জানি তবেই আমি দক্ষ হয়ে উঠব। আমি অনর্গল সিনট্যাক্স কপি করতে পারতাম। কিন্তু কোনো কমান্ড কেন একটি নির্দিষ্ট ফলাফল দিল তা যদি আমাকে ব্যাখ্যা করতে বলা হতো, তবে আমি চুপ হয়ে যেতাম। সেই নীরবতাই ছিল আসল সমস্যা।

নোটবুক ফাঁদ

নোটবুকটি দেখে মনে হচ্ছিল আমি উন্নতি করছি। প্রতিটি পাতায় আরও কালি জমছিল: find / -name "*.conf", nmap -sV, পাইপ এবং রেগুলার এক্সপ্রেশনসহ grep। টিউটোরিয়ালে এই পদ্ধতিটি কার্যকর মনে হয়। একজন উপস্থাপক একটি কমান্ড টাইপ করেন, স্ক্রিনে প্রত্যাশিত আউটপুট দেখা যায় এবং আপনি মাথা নেড়ে সম্মতি জানান। আপনি নিজেকে সক্ষম মনে করেন কারণ আপনার টার্মিনালটি হুবহু তাদের মতো দেখাচ্ছে। কিন্তু এই সক্ষমতা ধার করা। এটি সেই ব্যক্তির, যিনি টিউটোরিয়ালটি তৈরি করেছেন।

বাস্তব পরিবেশ কোনো স্ক্রিপ্ট মেনে চলে না। পোর্ট খোলা থাকা সত্ত্বেও একটি সার্ভার আপনার SSH কানেকশন প্রত্যাখ্যান করতে পারে। chmod +x চালানোর পরেও একটি স্ক্রিপ্ট "permission denied" ত্রুটি দিয়ে ব্যর্থ হতে পারে। একটি স্ক্যান কোনো পোর্টকে 'open' এর পরিবর্তে 'filtered' হিসেবে রিপোর্ট করতে পারে, এবং এখন আপনাকে সিদ্ধান্ত নিতে হবে যে এটি একটি ফায়ারওয়াল রুল, হোস্ট-ভিত্তিক কন্ট্রোল, নাকি একটি ইনট্রুশন প্রিভেনশন সিস্টেম যা নিঃশব্দে আপনার প্রব (probe) গুলোকে ড্রপ করছে। সেই মুহূর্তগুলোতে সিনট্যাক্স মুখস্থ করা ব্যর্থ হয় কারণ সমস্যাটি কোনো ভুলে যাওয়া কমান্ড নয়; সমস্যাটি হলো একটি সিস্টেম যা আপনি বোঝেন না।

কপি করা মানে শেখা নয়

একটি টিউটোরিয়াল অনুসরণ করা এবং একটি সমস্যা সমাধান করার মধ্যে পার্থক্য আছে। যখন আপনি কপি করেন, আপনি অন্য কারো ম্যাপ অনুসরণ করে ধাপ A থেকে ধাপ B-তে যান। যখন কিছু বিচ্যুত হয়, আপনি স্থবির হয়ে পড়েন কারণ আপনার মানসিক মডেলটি (mental model) শূন্য। আপনি জানেন যে chmod 755 পারমিশন পরিবর্তন করে, কিন্তু আপনি ব্যাখ্যা করতে পারেন না কেন ফাইলটি noexec ফ্ল্যাগযুক্ত একটি মাউন্ট-এ থাকা সত্ত্বেও সিস্টেম অ্যাক্সেস ব্লক করে দিচ্ছে। আপনি জানেন nmap দিয়ে পোর্ট স্ক্যান করা যায়, কিন্তু আপনি ব্যাখ্যা করতে পারেন না কেন stateful inspection-এর ক্ষেত্রে একটি SYN স্ক্যান একটি connect স্ক্যানের চেয়ে ভিন্ন ফলাফল দেয়।

আপনি Linux বা networking শিখছিলেন না। আপনি অনুকরণ করতে শিখছিলেন।

প্রশ্নটি উল্টে দিন

আমি একটি জিনিস পরিবর্তন করেছি। আমি "কোন কমান্ডটি এটি ঠিক করবে?" জিজ্ঞেস করা বন্ধ করে "সিস্টেমটি আসলে কী করছে?" জিজ্ঞেস করা শুরু করেছি। এই পরিবর্তনটি অস্বস্তিকর ছিল কারণ এটি আমার কাজের গতি কমিয়ে দিয়েছিল। কিন্তু এটি কার্যকর ছিল।

ফাইল পারমিশনের কথা ধরা যাক। chmod কোনো জাদুকরী মন্ত্র নয়। এটি হলো কার্নেল কীভাবে inodes-এ অ্যাক্সেস নিয়ন্ত্রণ করে তার একটি উপরিভাগের স্তর মাত্র। যখন আপনি বুঝতে পারেন যে অপারেটিং সিস্টেম আপনার effective user ID-কে ফাইলের owner, group এবং others-এর সাথে মিলিয়ে দেখে, তখন সংখ্যাগুলো অর্থবহ হয়ে ওঠে। যখন আপনি শিখবেন যে ডিরেক্টরি পারমিশন নিয়ন্ত্রণ করে আপনি কোনো পাথে প্রবেশ করতে পারবেন কি না বা তার বিষয়বস্তু তালিকাভুক্ত করতে পারবেন কি না, তখন আপনি আর অবাক হবেন না যে কেন আপনি একটি ফাইল পড়তে পারছেন কিন্তু সেখানে পৌঁছাতে পারছেন না। আপনি বুঝতে পারবেন যে একটি ডিরেক্টরির ওপর execute পারমিশন থাকা মানে প্রোগ্রাম চালানো নয়; বরং এর ভেতরে থাকা inodes-এ অ্যাক্সেস করার অনুমতি পাওয়া। হঠাৎ করেই, chmod-এর জন্য মুখস্থ করার প্রয়োজন পড়ে না। এর জন্য প্রয়োজন প্রেক্ষাপট বা context।

নেটওয়ার্কিং ফান্ডামেন্টালগুলো nmap-এর ক্ষেত্রেও একই কাজ করে। একটি পোর্ট স্ক্যান মানে খোলা দরজার তালিকা নয়; এটি প্যাকেট দিয়ে তৈরি একটি কথোপকথন। যখন আপনি TCP three-way handshake বুঝতে পারবেন, তখন আপনি বুঝতে পারবেন কেন একটি SYN স্ক্যানের জন্য raw socket প্রিভিলেজ প্রয়োজন এবং কেন একটি বন্ধ পোর্ট RST দিয়ে সাড়া দেয়, যেখানে একটি ফিল্টার করা পোর্ট হয়তো কিছুই দেখাবে না। আপনি ফ্ল্যাগ কম্বিনেশন মুখস্থ করা বন্ধ করবেন এবং আপনি কী প্যাকেট পাঠাচ্ছেন এবং সেই নীরবতা বা শব্দ (noise) কী বোঝায় তা নিয়ে যুক্তি দিয়ে চিন্তা করতে শুরু করবেন।

এমনকি Burp Suite-এর মতো অ্যাপ্লিকেশন-লেয়ার টুলগুলোও আপনি যখন HTTP বুঝতে পারবেন তখন সহজ হয়ে যাবে। এটি আপনার এবং একটি ওয়েব সার্ভারের মাঝখানে থাকা একটি প্রক্সি মাত্র। আপনি যদি HTTP methods, headers, status codes এবং রিকোয়েস্টগুলো কীভাবে সার্ভার-সাইড লজিকের সাথে সম্পর্কিত তা না বোঝেন, তবে Burp Suite হবে বোতামের একটি বিভ্রান্তিকর ড্যাশবোর্ড। একবার যখন আপনি জানবেন একটি রিকোয়েস্ট কীভাবে ভ্রমণ করে এবং একটি সার্ভার কীভাবে একটি রেসপন্স তৈরি করে, তখন টুলটি অত্যন্ত সহজ হয়ে যাবে। আপনি Burp Suite শিখছেন না। আপনি Burp Suite দিয়ে HTTP পরিদর্শন করছেন।

ভিত্তি তৈরি করুন

আপনি যদি নতুন শুরু করেন, তবে চিটশিট (cheatsheets) সংগ্রহ করার প্রলোভন থেকে দূরে থাকুন। তিনটি বিষয়ের ওপর মনোযোগ দিন যা কখনো অপ্রচলিত হবে না।

Linux basics-এর জন্য শিখুন কীভাবে কার্নেল প্রসেস শিডিউল করে, কীভাবে শেল কমান্ড পার্স (parse) করে এবং কীভাবে এনভায়রনমেন্ট ভেরিয়েবল প্রোগ্রামের আচরণকে প্রভাবিত করে। stdin, stdout, এবং stderr-কে কেবল trivia হিসেবে নয়, বরং পাইপ (pipes) কাজ করানোর জন্য প্রয়োজনীয় সংযোগ বা plumbing হিসেবে বুঝুন।

networking protocols-এর জন্য, তাড়াহুড়ো না করে TCP/IP stack নিয়ে পড়াশোনা করুন।