تازہ VPS پر Lynis کا پہلا چلنا عموماً 60 کے آس پاس کوئی عدد اور سفارشات کی ایک لمبی فہرست دیتا ہے جس میں یہ واضح نہیں ہوتا کہ پہلے کس چیز کو ہاتھ ڈالیں۔ اچھی خبر: 80 سے 85 ایک شام کا کام ہے، اور بیشتر اقدامات محض دکھاوا نہیں بلکہ واقعی کارآمد ہیں۔ بری خبر: آخری پندرہ نکات کرائے کی ورچوئل مشین پر ناقابلِ حصول ہیں، اور ان کے پیچھے بھاگنا غلطی ہے۔

اشاریہ کیا دکھاتا ہے اور کیا نہیں

سختی اشاریہ کامیاب ٹیسٹوں کا کل کے ساتھ تناسب ہے، وزن کے ساتھ — سیکیورٹی کا فیصد نہیں۔ Lynis تقریباً تین سو ٹیسٹ چلاتا ہے اور دو الگ فہرستیں بناتا ہے: warnings جو حقیقی مسائل لگتی ہیں، اور suggestions جو بہتر کی جا سکنے والی باتیں ہیں۔ ہمیشہ انتباہات سے شروع کیا جاتا ہے؛ عموماً وہ چند ہی ہوتے ہیں۔

سو نکات ہوتے ہی نہیں: کچھ سفارشات ایسے فیصلے مانگتی ہیں جو نظام کی تنصیب کے وقت کیے جاتے ہیں (/home، /tmp اور /var کے لیے الگ پارٹیشن)، کچھ کو بوٹ لوڈر تک رسائی چاہیے جو VPS میں نہیں، اور کچھ ایک دوسرے کی نفی کرتی ہیں۔ اور اپنے اشاریے کا دوسروں سے موازنہ بھی بے معنی ہے: Lynis اُس ہر چیز پر نکات کاٹتا ہے جو مشین پر چل رہی ہو۔ ہر چلتی سروس ایک اور کھلا پورٹ، اپنی ترتیبات اور درجن بھر نئی سفارشات ہے — اسی لیے بلند اعداد وہاں زیادہ ملتے ہیں جہاں SSH کے سوا کچھ نہیں چلتا۔ سائٹ، ڈیٹابیس اور میل والے کام کرتے سرور کے لیے 85 اچھا نتیجہ ہے۔

اسے root کے طور پر چلائیں

sudo lynis audit system

sudo کے بغیر Lynis ہر وہ ٹیسٹ چھوڑ دیتا ہے جسے نظام کی فائلیں درکار ہوں اور کم اشاریہ بتاتا ہے — اس لیے نہیں کہ سرور برا ہے بلکہ اس لیے کہ جانچیں دکھائی ہی نہ دیں۔ رپورٹ /var/log/lynis-report.dat میں لکھی جاتی ہے، اور پڑھنے کے قابل جرنل /var/log/lynis.log میں۔

نتیجے کی ہر سطر ٹیسٹ کے شناخت کنندہ سے شروع ہوتی ہے، جیسے SSH-7408 یا KRNL-6000۔ اسی شناخت کنندے سے آپ وضاحت بھی پاتے ہیں اور ٹیسٹ بند کرنے کا طریقہ بھی — اس کی شکل یاد رکھیں، نیچے کی ہر بات اسی کے گرد گھومتی ہے۔

عدد کو واقعی کیا حرکت دیتا ہے

SSH (SSH-7408)۔ سب سے بھاری حصہ: ایک ہی ٹیسٹ بیک وقت درجن بھر پیرامیٹر جانچتا ہے۔ پورا sshd_config ترمیم نہ کریں؛ ایک الگ فائل رکھیں تاکہ پیکج کی تازہ کاری آپ کا کام نہ مٹا دے:

sudo tee /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
MaxSessions 2
X11Forwarding no
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
LogLevel VERBOSE
TCPKeepAlive no
EOF
sudo sshd -t && sudo systemctl reload ssh

سروس دوبارہ لوڈ کرنے سے پہلے sshd -t لازمی ہے: آپ کا سیشن زندہ ہوتے ہوئے ترتیبات میں غلطی آپ کو باہر چھوڑ دے گی۔ اور PasswordAuthentication no رکھنے سے پہلے یقین کریں کہ کلید واقعی کام کرتی ہے — دوسرے کھلے ٹرمینل سے۔

کرنل کے پیرامیٹر (KRNL-6000)۔ یہ ٹیسٹ بیس کے قریب sysctl اقدار جانچتا ہے۔ ان کے لیے ایک فائل:

sudo tee /etc/sysctl.d/99-hardening.conf <<'EOF'
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
kernel.sysrq = 0
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.log_martians = 1
EOF
sudo sysctl --system

غائب اوزار۔ سفارشات کا خاصا حصہ محض «جو نہیں ہے وہ نصب کریں» ہے: auditd (نظامی واقعات کا اندراج)، aide (فائلوں کی سالمیت)، debsums (پیکجوں کی سالمیت)، unattended-upgrades (خودکار سیکیورٹی تازہ کاریاں)، sysstat اور acct (عمل کا حساب)، اور بدنیت سافٹ ویئر کا اسکینر۔ ہر ایک ایک یا دو سفارشات بند کرتا ہے، مگر انہیں نکات کی خاطر نصب نہ کریں: ان کے بغیر کسی واقعے کے بعد آپ کچھ بھی دوبارہ نہیں جوڑ سکیں گے۔

محنت اور فائدے کے اچھے تناسب والی چھوٹی باتیں۔ /etc/login.defs میں umask 027؛ اسی فائل میں پاس ورڈ کی مدت؛ /etc/issue اور /etc/issue.net کے پیغامات؛ اور صرف root کے پڑھنے کے قابل کمپائلر (chmod 700 /usr/bin/gcc)۔ اور پیغامات کے بارے میں سچ یہ ہے: سیکیورٹی کے لیے وہ کچھ نہیں کرتے، یہ قانونی رسم ہے — مگر ایک نکتہ دیتے ہیں۔

login.defs میں ایک پھندا

sed سے سطر بدل کر umask کی ترمیم اکثر فائل میں بیک وقت کئی UMASK سطریں چھوڑ دیتی ہے۔ تب Lynis قدر کو شمار نہیں کرتا اور ٹیسٹ AUTH-9328 سرخ ہی رہتا ہے حالانکہ ترتیب مکمل نظر آتی ہے۔ ترمیم کے بعد جانچیں:

grep -c '^UMASK' /etc/login.defs

بالکل ایک ہونی چاہیے۔ یہی بات اُس فائل کے ہر دوسرے پیرامیٹر پر بھی لاگو ہے۔

جھوٹی اطلاعات اور انہیں درست طور پر خاموش کرنا

کچھ انتباہات آپ کے سرور سے سرے سے تعلق نہیں رکھتے۔ ایک زندہ مثال: ایک بڑے فراہم کنندہ کے VPS پر ٹیسٹ PKGS-7388 بتاتا ہے کہ سیکیورٹی کا کوئی ذخیرہ نہیں ملا — محض اس لیے کہ ذخیرے deb822 وضع میں آئینہ فائل کے حوالے سے بیان ہوئے ہیں، اور Lynis مانوس سطر ڈھونڈتا ہے۔ اور سیکیورٹی کی تازہ کاریاں بخوبی پہنچتی رہتی ہیں۔

اسے رپورٹ سے سطریں مٹا کر نہیں بلکہ ایک پروفائل سے خاموش کریں۔ پروفائل فائلوں کی توسیع .prf ہے (.prof نہیں — یہاں آدھا گھنٹہ آسانی سے ضائع ہو سکتا ہے)، اور آپ کے اپنے قواعد /etc/lynis/custom.prf میں جاتے ہیں:

skip-test=PKGS-7388
skip-test=KRNL-5788

ایک اصول: ہر سطر کے ساتھ ایک تبصرہ چاہیے جو بتائے کہ ٹیسٹ کیوں چھوڑا گیا۔ چھ ماہ بعد آپ کو یاد نہیں رہے گا کہ اسے اس لیے بند کیا تھا کہ وہ آپ پر لاگو نہیں ہوتا یا اس لیے کہ اس کی درستی جھنجھٹ تھی — اور انہی دو صورتوں کا فرق ہی سارا مطلب ہے۔

کیا نہیں کرنا چاہیے

عدد کے پیچھے نہ بھاگیں۔ ناپسندیدہ ٹیسٹ بند کر کے اشاریہ آسانی سے پھلایا جا سکتا ہے، اور ایک خاص سطح کے بعد یہی واحد راستہ ہے — بس سرور اس سے ذرہ برابر بھی محفوظ تر نہیں ہوتا۔ کارآمد کچھ اور ہے: اپنی قدر درج کریں اور اس کی تبدیلی پر نظر رکھیں۔ ایسا اشاریہ جو کسی تازہ کاری کے بعد یا ترتیبات میں کسی اور کی ترمیم کے بعد گر جائے، اپنی مطلق مقدار سے کہیں قیمتی اشارہ ہے۔

اور عین اسی لیے Lynis کو ایک بار نہیں بلکہ شیڈول پر چلانا چاہیے، اور رپورٹیں محفوظ رکھنی چاہئیں تاکہ موازنے کے لیے کچھ ہو۔ یہ سب ایک صفحے پر یکجا ہو کر کیسا لگتا ہے، نیچے ڈیمو دکھاتا ہے: اشاریہ، ٹیسٹ کے شناخت کنندوں کے ساتھ انتباہات کی فہرست، اور پچھلی بار سے کیا بدلا۔