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 कुंजियों वाली घटनाएँ कभी-कभार आती हैं और हर एक समझाई जा सकती है। एक पन्ने पर यह कैसा लगता है, नीचे डेमो पर।