প্রবেশাধিকার পাওয়া অর্ধেক কাজ; বাকি অর্ধেক সেটি না হারানো। সেজন্যই প্রায় প্রতিটি স্বয়ংক্রিয় ক্ষতিকর সফটওয়্যার সবার আগে নিজের আবার চালু হওয়ার বন্দোবস্ত করে: পুনরারম্ভের পরে, ফাইল মুছে যাওয়ার পরে, পাসওয়ার্ড বদলের পরে। আর এখান থেকেই আসে সেই চেনা গল্প — «পরিষ্কার করলাম আর দুদিন পরে আবার এসে হাজির»।
যেসব জায়গায় এই বন্দোবস্ত হয় সেগুলো খুব বেশি নয়, আর সবগুলো কয়েক মিনিটে যাচাই করা যায়। নিচে ক্রম অনুযায়ী পুরো চক্রটি।
1. SSH-এর কি
ফেরার সবচেয়ে সরল পথ: authorized_keys-এর একটা লাইন পাসওয়ার্ড পরিবর্তন, সিস্টেম হালনাগাদ ও পুনরারম্ভ টিকে যায়।
sudo find /home /root -name authorized_keys -exec ls -l {} \; -exec cat {} \;
প্রতিটি লাইন কারও না কারও স্থায়ী প্রবেশাধিকার। কার, তা বলতে না পারলে সেটিকে পরের বলে ধরুন। লাইনের শেষে লেখা মন্তব্যেও খেয়াল করুন: সেটা যথেচ্ছ পাঠ্য, আর আপনার নামের সঙ্গে মেলা কিছুই প্রমাণ করে না।
2. সব ব্যবহারকারীর cron কাজ
কেবল নিজের crontab যাচাই করার কথা নয়:
for u in $(cut -f1 -d: /etc/passwd); do echo "== $u"; sudo crontab -u "$u" -l 2>/dev/null; done
sudo ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/
sudo cat /etc/crontab
খোঁজার মতো লক্ষণ: @reboot লাইন, লম্বা দুর্বোধ্য কমান্ড, শেলে ঢোকানো curl বা wget-এর ডাক, আর /tmp, /dev/shm বা /var/tmp থেকে চলা যেকোনো কিছু। এসব ডিরেক্টরি থেকে আদর্শ কিছুই চলে না।
3. systemd-র টাইমার ও সেবা
cron-এর আধুনিক বিকল্প, আর একে লক্ষণীয়ভাবে কম যাচাই করা হয়:
systemctl list-timers --all
systemctl list-units --type=service --state=running
sudo ls -la /etc/systemd/system/ /run/systemd/system/
আর আলাদা করে, ব্যবহারকারীর সেবা, যেগুলো root-এর ক্ষমতা ছাড়াই চলে আর সাধারণ তালিকায় আসে না:
systemctl --user list-units --type=service
sudo ls -la /home/*/.config/systemd/user/
আরেকটা খুঁটিনাটি: কোনো ব্যবহারকারীর জন্য চালু করা lingering (loginctl enable-linger) তার সেবাগুলোকে সক্রিয় সেশন ছাড়াই চলতে দেয়। এটি loginctl list-users দিয়ে যাচাই করুন।
4. শেলের সূচনা ফাইল
শেলের সূচনা ফাইলের শেষে জোড়া কোড প্রতিটি লগইনে চলে:
sudo tail -5 /root/.bashrc /root/.profile /home/*/.bashrc /home/*/.profile
sudo ls -la /etc/profile.d/
ঠিক ফাইলের শেষটাই দেখুন — সেখানেই জোড়া হয় যাতে ভাসা ভাসা দেখায় চোখে না পড়ে।
5. ld.so.preload
এমন একটা ফাইল যা সিস্টেমকে প্রতিটি চলমান প্রক্রিয়ায় নির্দিষ্ট একটা লাইব্রেরি লোড করতে বাধ্য করে। আর স্বাভাবিক অবস্থায় সেটি কখনও তৈরি হয় না:
ls -l /etc/ld.so.preload
তার উপস্থিতি কার্যত গুরুতর আপসের দ্ব্যর্থহীন লক্ষণ, আর এমন লাইব্রেরি সাধারণত ফাইল, প্রক্রিয়া ও নেটওয়ার্ক সংযোগ সবই একসঙ্গে লুকিয়ে ফেলে। আর ওই যন্ত্রে এরপর আপনি যা দেখবেন তা ভরসার যোগ্য নয়।
6. প্যাকেজ ব্যবস্থাপকের hook
যে উপায়টা কম মনে থাকে: apt প্যাকেজ নিয়ে প্রতিটি কাজের আগে ও পরে কমান্ড চালাতে পারে।
sudo ls -la /etc/apt/apt.conf.d/
sudo grep -r 'DPkg::Pre-Invoke\|DPkg::Post-Invoke\|APT::Update' /etc/apt/apt.conf.d/
এমন hook প্রতিটি হালনাগাদ বসানোর সময় চলে — অর্থাৎ নিয়মিত আর root হিসেবে।
7. Ubuntu-তে দিনের বার্তা
/etc/update-motd.d/ ডিরেক্টরিতে সেসব চলনযোগ্য স্ক্রিপ্ট থাকে যেগুলো প্রতিটি SSH লগইনে চলে আর স্বাগত পাঠ্য বানায়। আর এই জায়গাটা ঠিক এই কারণেই সুবিধাজনক যে সেটিকে সিস্টেমের অংশ মনে হয়:
sudo ls -la /etc/update-motd.d/
8. স্থগিত at কাজ
sudo atq
sudo ls -la /var/spool/cron/atjobs/ 2>/dev/null
পুরনো আর কম ব্যবহৃত একটা ব্যবস্থা, আর সেজন্যই সবচেয়ে কম যাচাই করা।
কিছু পাওয়া গেলে কী করবেন
প্রথম প্রতিক্রিয়া হলো যা পাওয়া গেল তা সঙ্গে সঙ্গে মুছে ফেলা। আর এটা ভুল: এর সঙ্গেই উবে যায় সেই তথ্য যে সেটি ওখানে কীভাবে পৌঁছাল, আর এই প্রশ্নের উত্তর ছাড়া সবটাই পুনরাবৃত্তি হবে।
- ফাইল বা কাজটির আর তার পরিবর্তনের সময়ের অনুলিপি রাখুন।
- সেই সময় ধরে ওয়েব সার্ভারের লগে আর
auth.log-এ দেখুন ওই মিনিটে কী ঘটছিল। প্রবেশের বিন্দু সাধারণত সেখানেই। - তালিকার সবগুলো আটটি জায়গা যাচাই করুন, কেবল যেখানে কিছু পাওয়া গেছে সেটি নয়। পেছনের দরজা প্রায় কখনও একটিমাত্র অনুলিপিতে রেখে যাওয়া হয় না।
- এবং তারপর পরিষ্কার করুন আর খোদ ত্রুটিটি বন্ধ করুন।
স্বাভাবিক কেমন হয় তা জানা
এই যাচাইয়ে আসল কঠিনতা কমান্ড নয়, বরং এই যে কাজের তালিকায় কোনো অচেনা লাইন সন্দেহজনক লাগে না যদি আপনার মনে না থাকে তালিকাটা আগে কেমন ছিল। আর যে সার্ভার অন্য কেউ সাজিয়েছে, বা যেটি এক বছর আগে সাজানো হয়েছে, সেখানে নিজের আর পরের মধ্যে পার্থক্য করা প্রায় অসম্ভব।
এ থেকেই ব্যবহারিক সিদ্ধান্ত: «যেমন আছে তেমন» স্ন্যাপশট আজই নেওয়ার মানে হয়, যতক্ষণ সার্ভার ঠিক আছে। সুস্থ যন্ত্রে cron কাজ, টাইমার, কি আর সেবার তালিকাই সেই মানদণ্ড যার সঙ্গে পরে সবকিছু মেলানো হয়। আর তারিখসহ এক জায়গায় জোড়া ও সুরক্ষিত হয়ে সেটি পেছনের দরজা খোঁজাকে কয়েক ঘণ্টার কসরত থেকে দুটি তালিকার তুলনায় পরিণত করে। এটি কেমন দেখায় তা নিচের ডেমো পাতা দেখায়।