Process Basics
তুমি যখন কোনো program চালাও, Linux সেটার জন্য RAM-এ জায়গা বরাদ্দ করে, CPU time দেয়, এবং একটি unique ID দেয় — এটাই process। System-এ কী চলছে সেটা না বুঝলে troubleshooting এবং cybersecurity দুটোই কঠিন।
Processes vs Programs
Program আর process এক জিনিস নয়।
python3 হলো disk-এ থাকা একটি file — এটা program। যখন তুমি python3 app.py চালাও, Linux সেই file-কে RAM-এ load করে এবং CPU দিয়ে execute শুরু করে — এটা তখন একটি process।
একই program থেকে একাধিক আলাদা আলাদা process তৈরি হতে পারে। প্রতিটি প্রসেসের নিজস্ব একটি PID (Process ID) থাকে।
Process Identity
প্রতিটি প্রসেসের পেছনে কিছু আইডেন্টিটি বা পরিচয় থাকে যা লিনাক্স কার্নেল সবসময় ট্র্যাক করে:
| প্রপার্টি | মানে | কেন দরকার |
|---|---|---|
| PID | Process ID | প্রসেসটিকে ইউনিকভাবে চেনার জন্য |
| PPID | Parent PID | কোন প্রসেস থেকে এটি তৈরি হয়েছে তা বোঝার জন্য |
| UID/EUID | User ID | প্রসেসটি কোন ইউজারের পাওয়ার নিয়ে চলছে তা দেখতে |
Real vs Effective UID:
মাঝে মাঝে একটি প্রসেসের দুজন মালিক থাকতে পারে। লিনাক্সে একটি প্রসেসের Real UID হলো সেই ইউজার যে আসলে এটি চালু করেছে। কিন্তু যদি প্রসেসটি কোনো SUID ফাইলের মাধ্যমে চলে, তবে তার Effective UID হতে পারে রুট (root)। এই ট্রিকের মাধ্যমেই সাধারণ ইউজাররা পাসওয়ার্ড চেঞ্জ (passwd) করার মতো রুট লেভেলের কাজ করতে পারে।
ProcFS Internals
লিনাক্সে ** everything is a file **। এমনকি প্রসেসগুলোও কার্নেলের কাছে কিছু ফাইলের সমষ্টি। /proc/ ডিরেক্টরিটি হলো এক ধরণের ভার্চুয়াল ফাইলসিস্টেম যেখানে চলমান সব প্রসেসের তথ্য থাকে।
# একটি প্রসেসের (ধরো PID 1234) ফোল্ডারে ঢোকো
ls /proc/1234সেখানে কিছু গুরুত্বপূর্ণ ফাইল থাকে যা ইনভেস্টিগেশনে কাজে লাগে:
/proc/[pid]/environ: প্রসেসটির সব এনভায়রনমেন্ট ভ্যারিয়েবল (ম্যালওয়্যার অনেক সময় এখানে সিক্রেট কী লুকিয়ে রাখে)।/proc/[pid]/cmdline: পুরোপুরি কোন কমান্ড দিয়ে এটি চালু হয়েছে।/proc/[pid]/fd: প্রসেসটি এই মুহূর্তে কোন কোন ফাইল বা নেটওয়ার্ক সকেট ব্যবহার করছে।
System Calls
প্রসেসগুলো যখন কোনো কাজ করতে চায় (যেমন: ফাইল পড়া বা নেটওয়ার্কে কানেক্ট করা), তখন তারা সরাসরি হার্ডওয়্যারের কাছে যায় না। তারা লিনাক্স Kernel-কে রিকোয়েস্ট পাঠায়। এই রিকোয়েস্টগুলোকে বলা হয় System Calls বা Syscalls।
একটি প্রসেস কার্নেলের সাথে কী কথা বলছে তা দেখার জন্য strace ব্যবহার করা হয়:
# একটি কমান্ড কার্নেলের সাথে কী কী কথা বলছে তা দেখো
strace ls /tmpMonitoring Tools
চলমান প্রসেসগুলো দেখার জন্য আমরা সাধারণত এই টুলগুলো ব্যবহার করি:
ps aux: বর্তমানে চলমান সব প্রসেসের একটি স্ন্যাপশট।top: লাইভ প্রসেস মনিটর (রিয়েল-টাইম আপডেট হয়)।htop:top-এর একটি সুন্দর ও ইন্টারঅ্যাক্টিভ ভার্সন।
ps aux এর আউটপুট বোঝা:
USER PID %CPU %MEM COMMAND
root 1 0.0 0.1 /sbin/init
omar 1234 0.5 1.2 python3 app.pyCyberSec Note
Rootkit Detection via /proc:
অ্যাডভান্সড অ্যাটাকাররা অনেক সময় রুটকিট (Rootkit) ব্যবহার করে ps বা top কমান্ডের রেজাল্ট পরিবর্তন করে ফেলে যাতে তাদের ম্যালওয়্যার প্রসেস আমরা দেখতে না পাই। কিন্তু তারা /proc ডিরেক্টরি সহজে লুকাতে পারে না।
আপনি যদি ps কমান্ড ব্যবহার করে কোনো প্রসেস না পান, কিন্তু /proc/ এর ভেতর ফোল্ডারটি খুঁজে পান, তবে বুঝবেন আপনার সিস্টেমে রুটকিট অ্যাটাক হয়েছে।
# ps থেকে সব PID নাও
ps aux | awk '{print $2}' > ps_pids.txt
# /proc থেকে সব PID নাও
ls /proc | grep -E "^[0-9]+$" > proc_pids.txt
# তুলনা করো
diff ps_pids.txt proc_pids.txtQuick Check
- প্রোগ্রাম এবং প্রসেসের মধ্যে মূল পার্থক্য কী?
- কেন একটি প্রসেসের Real UID এবং Effective UID আলাদা হতে পারে?
-
/proc/[pid]/fdএর ভেতরে আমরা কী ধরণের তথ্য পেতে পারি? -
straceকমান্ডটি কেন লিনাক্স ট্রাবলশুটিং বা ম্যালওয়্যার অ্যানালাইসিসে দরকার হয়?
পরবর্তী → Background Jobs