auditd সেসব প্রশ্নের উত্তর দেয় যা ঘটনার পরে ওঠে: এই ফাইলটা কে বদলেছে, এই ব্যবহারকারী কখন তৈরি হয়েছে, এই প্রক্রিয়া কোথা থেকে চালু হয়েছে। অন্য কোনো সরঞ্জাম এদের উত্তর দেয় না — অ্যাপ্লিকেশনের লগে এই তথ্য থাকে না, আর শেলের ইতিহাস সম্পাদনা করে সে-ই যে সেটি রেখে গেছে।
অসুবিধা হলো প্যাকেজ বসানোয় নিজে থেকে কিছুই মেলে না। ডিফল্ট নিয়ম কার্যত নেই-ই, জার্নাল লেখা হয় কিন্তু সারবস্তুতে ফাঁকা, আর এটা জানা যায় সবচেয়ে খারাপ মুহূর্তে — যখন তথ্য দরকার আর সেটি নেই।
স্থাপন
sudo apt install auditd audispd-plugins
sudo systemctl status auditd
একটা বৈশিষ্ট্য: কিছু সংস্করণে auditd-কে systemctl restart দিয়ে পুনরায় চালু করা যায় না — সেবাটি নিজের কমান্ড দিয়েই চলে। নিয়ম আবার পড়া হয় এভাবে:
sudo augenrules --load
sudo auditctl -l
দ্বিতীয় কমান্ডটি দেখায় সত্যিই কী লোড হয়েছে। এটিতেই ভরসা করুন, ফাইলের বিষয়বস্তুতে নয়।
নিয়ম-সেট
নিয়ম যায় /etc/audit/rules.d/-তে আলাদা ফাইল হিসেবে। নিচে ন্যূনতম সেট যা নিজের দাম উশুল করে: এটি ডিস্ক না ডুবিয়ে কোনো ঘটনার সময় ওঠা বেশিরভাগ প্রশ্নের উত্তর দেয়।
sudo tee /etc/audit/rules.d/50-baseline.rules <<'EOF'
## ব্যবহারকারী ও অধিকার
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k privileges
-w /etc/sudoers.d/ -p wa -k privileges
## SSH প্রবেশাধিকার
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /root/.ssh/ -p wa -k ssh_keys
## সূচিবদ্ধ কাজ
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /var/spool/cron/ -p wa -k cron
## কার্নেল মডিউল
-w /sbin/insmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-a always,exit -F arch=b64 -S init_module -S delete_module -k modules
## sudo ও su-র ব্যবহার
-w /usr/bin/sudo -p x -k privileged
-w /bin/su -p x -k privileged
EOF
sudo augenrules --load
বাক্যরীতি সংক্ষিপ্ত: -w হলো দেখার পথ, -p wa মানে লেখা ও বৈশিষ্ট্যের পরিবর্তনে সাড়া দাও, -p x মানে নির্বাহে, -k হলো সেই কি যা দিয়ে পরে খোঁজা হয়। এই কি-গুলোই মূল সুবিধা: সেগুলো ছাড়া জার্নালে খোঁজা গিগাবাইট পাঠ্য ছাঁকায় পরিণত হয়।
ওই তালিকায় কী নেই, আর কেন
নির্দেশিকা প্রায়ই প্রতিটি execve কল নথিভুক্ত করার পরামর্শ দেয় — অর্থাৎ প্রতিটি প্রোগ্রামের প্রতিটি চালু হওয়া। লোভটা বোধগম্য: যা করা হয়েছে তার পূর্ণ ছবি। বাস্তবে, কর্মরত সার্ভারে এটি দিনে কয়েকশো মেগাবাইট বানায়, প্রসেসরের লক্ষণীয় অংশ খায় আর জার্নাল দরকারের আগেই ছেঁটে যাওয়ার দিকে নিয়ে যায়। এই মাত্রার বিশদ দরকার হলে সেটি সংকীর্ণভাবে চালু করুন — একজন ব্যবহারকারীর জন্য, বা তদন্তের সময়কালের জন্য।
একই কথা সাইটের ডিরেক্টরিতে নজর রাখার ক্ষেত্রে: তাতে লেখা অবিরত চলে, আর নিয়মটি জার্নালকে অর্থহীন ঘটনার স্রোতে পরিণত করে।
পড়া
কি দিয়ে খুঁজুন, সাংখ্যিক শনাক্তকারীকে নামে রূপান্তর করে:
sudo ausearch -k identity -i
sudo ausearch -k privileges -i -ts today
পড়ার উপযোগী করতে -i পতাকা অপরিহার্য: সেটি ছাড়া ব্যবহারকারীর নাম ও সিস্টেম কলের বদলে সংখ্যা মেলে। -ts সময়কাল সীমিত করে (today, recent, বা নির্দিষ্ট তারিখ)।
সময়কালের সারসংক্ষেপ:
sudo aureport --summary -i
sudo aureport --auth -i --failed
ঘটনার এন্ট্রিতে তিনটি ক্ষেত্র আকর্ষণীয়: auid, যে ব্যবহারকারী সেশন শুরু করেছে তার শনাক্তকারী, uid, যে পরিচয়ে কাজটি চলেছে, আর exe, যে প্রোগ্রাম সেটি সম্পাদন করেছে। auid ও uid-র পার্থক্যই «ঠিক কে root হয়েছিল»-র উত্তর: নির্দিষ্ট কোনো ব্যক্তির auid-সহ uid=0 দোষীকে দ্ব্যর্থহীনভাবে নাম দেয়, সেশনের ভেতরে সে নিজেকে যা-ই বলুক।
ডিস্ক
আকারের সেটিংস থাকে /etc/audit/auditd.conf-এ:
max_log_file = 50
num_logs = 5
max_log_file_action = ROTATE
space_left = 500
space_left_action = SYSLOG
disk_full_action আলাদা করে দেখুন। কিছু ব্যবস্থায় ডিফল্ট হলো ডিস্ক ভরে গেলে সিস্টেম থামিয়ে দেওয়া — এমন আচরণ নিরীক্ষার বাধ্যবাধকতাযুক্ত যন্ত্রে যুক্তিসঙ্গত আর ওয়েব সার্ভারে সম্পূর্ণ বেমানান। ডিস্ক ফুরোনোর আগেই ওই মানটা যাচাই করুন।
অপরিবর্তনীয় নিয়ম
নিয়মের ফাইলের শেষে -e 2 লাইনটি পুনরারম্ভ পর্যন্ত নিয়ম বদলানো নিষেধ করে — যে root পেয়েছে তার জন্যও। এতে জার্নালের মূল্য লক্ষণীয়ভাবে বাড়ে: অনুপ্রবেশকারী যন্ত্র পুনরায় চালু না করে নজরদারি বন্ধ করতে পারে না, আর পুনরারম্ভ নিজেই দৃষ্টি আকর্ষণ করে।
উল্টো দিকটা স্পষ্ট: আপনিও পুনরারম্ভ ছাড়া নিজের নিয়ম বদলাতে পারবেন না। নিয়ম-সেট থিতু হয়ে যাওয়ার আর তার সঙ্গে এক মাস কাটানোর পরে এটি চালু করুন।
সাধারণ সার্ভারে এর দরকার কী
auditd কিছুই ঠেকায় না। তার মূল্য দেখা যায় ঠিক একবার — যখন ঘটনার ক্রম পুনর্গঠন করতে হয়, আর তথ্য হয় আছে নয় নেই। এটি পিছিয়ে গিয়ে সংগ্রহ করা যায় না, সেজন্যই নিয়ম-সেট আগেভাগে বসানো হয় আর তারপর ছোঁয়া হয় না।
ব্যবস্থা সঠিক হওয়ার ব্যবহারিক লক্ষণ: নিয়মের তালিকা ফাঁকা নয়, জার্নাল বেপরোয়াভাবে বাড়ে না, আর identity ও privileges কি-যুক্ত ঘটনা কদাচিৎ আসে এবং প্রতিটিই ব্যাখ্যা করা যায়। এক পাতায় এটি কেমন দেখায় তা নিচের ডেমোতে।