Traditional Logs
লিনাক্সে প্রায় প্রতিটি সার্ভিস এবং অ্যাপ্লিকেশন তাদের কার্যক্রমের একটি লিখিত রেকর্ড রাখে। এই রেকর্ডগুলোকে বলা হয় Text Logs, এগুলো /var/log ডিরেক্টরিতে থাকে। একজন হ্যাকারকে ট্রেস করা বা সিস্টেমের এরর খুঁজে বের করার জন্য এটিই প্রথম ধাপ।
The Map of /var/log
সব লগ ফাইল এক জায়গায় থাকলেও একেকটি ফাইলের কাজ একেক রকম। নিচে গুরুত্বপূর্ণ কিছু লগ ফাইলের তালিকা দেওয়া হলো যা আপনার সবসময় চেক করতে হবে:
| ফাইল পাথ | কী থাকে? | কেন চেক করবেন? |
|---|---|---|
/var/log/auth.log | Authentication logs | কেউ লগইন করার চেষ্টা করছে কি না বা sudo পাসওয়ার্ড দিচ্ছে কি না। |
/var/log/syslog | Global system logs | সিস্টেমের প্রায় সব ধরণের মেজেস এখানে পাওয়া যায়। |
/var/log/kern.log | Kernel logs | হার্ডওয়্যার ড্রাইভ বা কার্নেল লেভেলের কোনো সমস্যা হলে। |
/var/log/apache2/ | Web server logs | ওয়েবসাইটের ভিজিটর এবং এরর চেক করতে। |
Anatomy of a Log Line (লগের ব্যবচ্ছেদ)
একটি লগ ফাইলের প্রতিটি লাইন একটি নির্দিষ্ট ফরম্যাট মেনে চলে। নিচে একটি Apache Access Log উদাহরণের মাধ্যমে এর প্রতিটি অংশ ব্যাখ্যা করা হলো:
10.9.232.111 - - [04/May/2021:18:18:16 +0000] "GET /catsanddogs.jpg HTTP/1.1" 200 51395| অংশ | উদাহরণ | ব্যাখ্যা |
|---|---|---|
| IP Address | 10.9.232.111 | কে আপনার সার্ভারে ভিজিট করেছে (অ্যাটাকার বা ইউজার)। |
| Timestamp | 04/May/2021... | ঘটনাটি ঠিক কখন ঘটেছে। |
| Request | GET /catsanddogs.jpg | ভিজিটর কী দেখতে চেয়েছে (ফাইল পাথ)। |
| Status Code | 200 | রিকোয়েস্টটি সফল হয়েছে কি না (200 = OK, 404 = Not Found)। |
| Size | 51395 | কতটুকু ডাটা ট্রান্সফার হয়েছে (বাইট-এ)। |
| User-Agent | Mozilla/5.0... | ভিজিটর কোন ডিভাইস বা ব্রাউজার ব্যবহার করছে। |
Advanced Byte (V8 vs WebKit):
লগ লাইনে AppleWebKit দেখে বিভ্রান্ত হবেন না। এটি হলো ব্রাউজারের Rendering Engine (যা ওয়েবসাইট দেখায়)। অন্যদিকে V8 হলো লজিক প্রসেস করার JS Engine। লগ ফাইল মূলত রেন্ডারিং কম্প্যাটিবিলিটি ট্র্যাক করে বলে এখানে ইঞ্জিনের নাম WebKit বা Blink থাকে।
Dealing with Compressed Logs (.gz)
আপনি যখন /var/log ডিরেক্টরিতে ls চালাবেন, দেখবেন অনেকগুলো ফাইল .gz ফরম্যাটে আছে। এগুলো হলো পুরনো লগ যা জায়গা বাঁচানোর জন্য জিপ করা হয়েছে। এগুলো পড়তে আপনাকে ফাইল আনজিপ করতে হবে না, বরং সরাসরি নিচের টুলগুলো ব্যবহার করতে পারেন:
- zless: জিপ করা ফাইল স্ক্রল করে পড়ার জন্য (যেমন:
zless auth.log.2.gz)। - zgrep: জিপ করা ফাইলের ভেতর কিছু সার্চ করতে (যেমন:
zgrep "Failed" auth.log.2.gz)। - zcat: জিপ করা ফাইলের সব কন্টেন্ট টার্মিনালে দেখতে।
The User Workflow (কী করবেন?)
একজন অ্যাডমিনিস্ট্রেটর বা লার্নার হিসেবে যখন আপনি /var/log এ আসবেন, তখন নিচের ধাপগুলো অনুসরণ করা সবচেয়ে কার্যকর:
১. উদ্দেশ্য অনুযায়ী ফাইল ফাইল বাছুন
আপনি কেন এসেছেন? লগইন সমস্যা হলে প্রথমেই auth.log খুলুন। সিস্টেম ক্র্যাশ করলে syslog বা kern.log দেখুন।
২. লাইভ মনিটর করুন (যদি সমস্যাটি এখন ঘটে থাকে)
যদি সমস্যাটি এই মুহূর্তে ঘটছে এমন মনে হয়, তবে tail -f ব্যবহার করে ফাইলটি খোলা রাখুন। এটি রিয়েল-টাইমে নতুন লাইনগুলো দেখাবে।
sudo tail -f /var/log/syslog৩. কি-ওয়ার্ড দিয়ে ফিল্টার করুন
হাজার হাজার লাইনের মাঝে সময় নষ্ট না করে grep দিয়ে আপনার প্রয়োজনীয় শব্দ খুঁজুন।
cat /var/log/auth.log | grep "Failed"৪. বাইনারি লগ চেক করুন
lastlog, wtmp, বা btmp এর মতো ফাইলগুলো সরাসরি পড়া যায় না। এগুলো পড়ার জন্য বিশেষ কমান্ড ব্যবহার করুন:
- last: গত কয়েকদিনের সফল লগইনগুলো দেখতে।
- lastb: ফেইল্ড লগইন অ্যাটেম্পট বা হ্যাকিং চেষ্টা দেখতে।
Do’s and Don’ts (কী করবেন এবং কী করবেন না?)
সার্ভার ম্যানেজমেন্টের সময় লগ ফাইল নিয়ে কাজ করার কিছু অলিখিত নিয়ম আছে যা আপনাকে একজন দক্ষ অ্যাডমিনিস্ট্রেটর হতে সাহায্য করবে:
✅ যা করবেন (Do’s):
- সার্চ করার আগে স্যাম্পল দেখুন: কোনো বড় ফাইল ফিল্টার করার আগে
headবাtailদিয়ে তার ৪-৫টি লাইন দেখে নিন যে ফরম্যাট ঠিক আছে কি না। - সার্ভিস অনুযায়ী লগ খুঁজুন: ওয়েবসাইট ডাউন থাকলে সরাসরি
apache2/error.logবাphp-fpm.logদেখুন। - পুরনো লগের সাহায্য নিন: আপনার সিস্টেমে যদি
.gzফাইল থাকে, তবে গত কয়েকদিনের ট্রেন্ড বোঝার জন্যzgrepব্যবহার করুন।
❌ যা করবেন না (Don’ts):
- সরাসরি ডিলিট (rm) করবেন না: একটি একটিভ লগ ফাইল কখনোই
rmকমান্ড দিয়ে ডিলিট করবেন না। এতে সেই সিস্টেমটি লগ লেখা বন্ধ করে দিতে পারে। - Cat ব্যবহার থেকে সিরিয়াসলি বিরত থাকুন: যদি ফাইলটি অনেক বড় হয়, তবে
catদিলে আপনার টার্মিনাল হ্যাং হয়ে যেতে পারে। সবসময়lessবাtailব্যবহার করুন। - বড় ফাইলে এডিটর (Nano/Vim) খুলবেন না: বিশাল বড় লগ ফাইল এডিটরে খুললে আপনার র্যাম (RAM) ফুল হয়ে সার্ভার ক্র্যাশ করতে পারে।
CyberSec Note
Log Forensic (Deep Dive):
সাইবার অ্যাটাকাররা যখন অ্যাটাক করে, তারা প্রায়ই তাদের আইপি লুকাতে চায়। আপনি নিচের কমান্ডটি দিয়ে দেখতে পারেন ঠিক কোন কোন ইউনিক আইপি থেকে আপনার সিস্টেমে লগইন করার চেষ্টা করা হয়েছে:
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nrএটি আপনাকে একটি পরিসংখ্যান দেবে যে কোন আইপি থেকে সবচেয়ে বেশিবার অ্যাটাক হয়েছে।
Troubleshooting: Permission Denied (লগ পড়তে না পারলে)
লগ ফাইল নিয়ে কাজ করার সময় আপনি প্রায়ই Permission denied এরর পাবেন। এটি সমাধান করার জন্য নিচের ধাপগুলো অনুসরণ করুন:
১. ফাইল পারমিশন চেক করুন
প্রথমে দেখুন ফাইলটির মালিক কে এবং কোন গ্রুপ এটি পড়তে পারে।
ls -l /var/log/apache2/access.log
# আউটপুট: -rw-r----- 1 root adm ...এখানে খেয়াল করুন:
- Owner (root): পড়তে ও লিখতে পারে।
- Group (adm): শুধু পড়তে পারে।
- Others: কোনো এক্সেস নেই।
২. আপনার গ্রুপ চেক করুন
যদি আপনি root না হয়ে থাকেন, তবে আপনার ইউজারটি adm গ্রুপের সদস্য কি না তা দেখুন:
idযদি আউটপুটে groups=...4(adm) থাকে, তবে আপনি sudo ছাড়াও এই লগগুলো পড়তে পারবেন (কিছু সিস্টেমে)। আর যদি না থাকে, তবে আপনাকে sudo ব্যবহার করতে হবে।
৩. ফাইলের সাইজ খেয়াল করুন
লগ ফাইল যদি একদম খালি হয় (সাইজ 0 bytes), তবে cat বা tail দিলে কিছুই দেখাবে না। সবসময় ls -l এ ফাইলের সাইজ দেখে নিশ্চিত হোন যে ভেতরে কোনো ডাটা আছে কি না।
Quick Check
- জিপ করা লগ ফাইল আনজিপ না করে পড়ার কমান্ড কোনটি?
-
lastকমান্ডটি দিয়ে কী দেখা হয়? -
tail -fকখন ব্যবহার করা সবচেয়ে ভালো? - একটি লগ লাইনে
sshd[1234]এর অর্থ কী?
পরবর্তী → Mastering journalctl