मैं अपने सर्वर पर उपयोगकर्ताओं और SSH के प्रयासों का ऑडिट कैसे कर सकता हूं?


28

मेरे पास एक सर्वर के साथ कुछ सुरक्षा समस्याएं हैं, कुछ SSH उपयोगकर्ता समस्याएँ देते हुए आग उर्फ ​​की स्थापना कर रहे हैं।

मैं:

  • उपयोगकर्ता लॉगिन और लॉगआउट ट्रैक करें
  • किसी भी दुर्भावनापूर्ण गतिविधि की खोज करने के लिए, इन SSH की गतिविधि पर नज़र रखें
  • लॉग को हटाने से उपयोगकर्ताओं को रोकें

मैं एक sys एडमिन के रूप में ज्यादा नहीं हूं और मैं इस मामले में काफी अनुभवहीन हूं, इसलिए किसी भी तरह की सलाह बहुत स्वागत और बहुत मददगार होगी। :)

जवाबों:


27

चूंकि हम SSH सर्वर के बारे में बात कर रहे हैं, इसलिए मैं आपको कमांड लाइन समाधान दूंगा।

  • उपयोगकर्ता लॉगिन और लॉगआउट ट्रैक करें। यह आसान है, फ़ाइल /var/log/auth.logमें यह जानकारी होनी चाहिए।

  • उन उपयोगकर्ताओं की गतिविधि को ट्रैक करें: यदि वे काफी निर्दोष हैं, तो आप .bash_historyउनके होम डायर में फ़ाइल की जांच कर सकते हैं । आपको उन आदेशों की एक सूची दिखाई देगी, जिन्हें उन्होंने निष्पादित किया था। समस्या यह है कि वे इस फ़ाइल को हटा सकते हैं या संपादित कर सकते हैं।

  • उपयोगकर्ताओं को लॉग हटाने से रोकें: उपयोगकर्ताओं को स्पर्श करने में सक्षम नहीं होना चाहिए auth.log। आदेश में उन्हें .bash_historyआप के साथ खेलने से रोकने के लिए चाल की एक जोड़ी करने की जरूरत है ।

  • क्या होगा यदि उपयोगकर्ता रूट एक्सेस प्राप्त करने का प्रबंधन करता है? : तुम तो बर्बाद हो गए। जब तक वे एक गलती नहीं करते हैं वे अपने सभी चरणों को छिपाने में सक्षम होंगे।


ध्यान दें कि उपयोगकर्ताओं को unset HISTFILEबैश के अंदर टाइप करने से रोकने का कोई तरीका नहीं है , और फिर उनका बैश इतिहास दर्ज नहीं किया जाएगा।
गाइल्स का SO-

@ गिल्स, ट्रिक्स लिंक जरूर पढ़े। उन्होंने HITSFILE को .profile में एक आसानी से परिवर्तनशील चर के रूप में सेट किया है।
जेवियर रिवेरा

मुझे लगा कि आप एक गैर-प्रतिबंधित बाश में एक आसानी से परिवर्तनशील चर को परेशान कर सकते हैं, लेकिन स्पष्ट रूप से नहीं। यह एक और शेल शुरू करने के बाद से थोड़ी सी तकलीफ को सुधारता है (जो पढ़ा नहीं जाएगा ~/.bash_historyया नहीं ~/.bashrc) में दिखाई देगा $HISTFILE। लेकिन यह अपने आप में पूरी तरह से वैध हो सकता है (जैसे कि उपयोगकर्ता बस चलाना चाहता है zsh, या वैकल्पिक रूप से अपना खुद का विकल्प सेट करना चाहता है bashrc)।
गिल्स एसओ- बुराई को रोकना '

1
हाँ। आप उसे बैश या किसी और खोल के लिए प्रतिबंधित कर सकते हैं। आखिर सुरक्षा सिर्फ एक दौड़ है।
जेवियर रिवेरा

यह सच नहीं है कि "यदि उपयोगकर्ता रूट एक्सेस प्राप्त करने का प्रबंधन करता है" तो वे सभी चरणों को छिपाने में सक्षम होंगे। आप हमेशा ऑडिट के लिए बाहरी सर्वर का उपयोग कर सकते हैं, जहां सभी चरणों को रिकॉर्ड किया जाएगा, जिसमें उनका रूट भी शामिल है।
पेट्र

6

[अस्वीकरण] मुझे एहसास है कि मैं पार्टी के लिए देर से हूं, लेकिन मैं एक जवाब देना चाहूंगा, जो मैंने एक और सवाल दिया था , क्योंकि मुझे ऐसा लगता है कि यह पाठकों को कुछ अच्छी अंतर्दृष्टि प्रदान कर सकता है, और यह सवाल प्रतीत होता है मूल ssh जानकारी के लिए जगह।

इसी तरह की एक समस्या थी जिसने आस्कुबंटु के यहाँ इस प्रश्न को पढ़ने के बाद मुझे मारा और मेरे VPS की जाँच की, केवल एक बलपूर्वक ब्रूट बल के प्रयासों को देखा। तभी मैंने कार्रवाई करने का फैसला किया।

अब मैं आपके द्वारा जुड़े प्रश्न के अनुसार, यदि आप ssh के ऊपर अपनी मशीन पर विफल लॉगिन प्रयास देखना चाहते हैं (बलपूर्वक प्रयास या कुछ भी हो सकता है), यह टाइप करने का प्रयास करें:

grep sshd.\*Failed /var/log/auth.log | less

यदि आउटपुट में कई पंक्तियाँ होती हैं, तो यह बल की कई कोशिशें होती हैं, खासकर यदि वे छोटे अंतराल के बीच हुई हों, तो आप निम्नलिखित कार्य करना चाह सकते हैं:

Ssh कॉन्फ़िगरेशन फ़ाइल बदलें

ऐसा करने के लिए, अपने पसंदीदा संपादक के साथ / etc / ssh / sshd_config पर स्थित फ़ाइल को इस तरह खोलें vim /etc/ssh/sshd_config

1. ssh को पोर्ट 22 से स्थानांतरित करने का प्रयास करें : अब उस रेखा का पता लगाएं जो पढ़ती है:

# What ports, IPs and protocols we listen for
Port 22

और पोर्ट 22 पर टिप्पणी करें, और जो भी आपको पसंद हो उसका उपयोग करें। उदाहरण:

# What ports, IPs and protocols we listen for
# Port 22
Port 28934

कृपया याद रखें कि 1024 से नीचे के बंदरगाहों को विशेष (रूट) अनुमति की आवश्यकता है। मुझे नहीं पता कि यह इसके साथ कैसे हस्तक्षेप कर सकता है, लेकिन मैं सिर्फ यह कह रहा हूं।

2. ssh के माध्यम से रूट लॉगिन को अक्षम करें : चूँकि रूट यूज़रनेम प्रेडिक्टेबल है और आपके सिस्टम तक पूरी पहुँच प्रदान करता है, इसलिए SSH के ऊपर इस खाते के लिए अपरिवर्तित पहुँच उपलब्ध नहीं है। पढ़ने लाइन का पता लगाएँ PermitRootLogin और के लिए सेट नहीं

PermitRootLogin no

3. पासवर्ड प्रमाणीकरण अक्षम करें : अपने सिस्टम में लॉग इन करने के लिए SSH कुंजियों का निर्माण और उपयोग करें। पासवर्ड सक्षम किए बिना, हमलावरों को आपके सर्वर तक पहुंच प्राप्त करने के लिए आपकी SSH निजी कुंजी का अनुमान (या चोरी) करना होगा। कुछ ऐसा जो बहुत मुश्किल है। लाइन है कि पढ़ता है खोजने के लिए आगे बढ़ें PasswordAuthentication और के लिए सेट नहीं

PasswordAuthentication no

! चेतावनी! ऐसा करने से पहले, कृपया प्रमाण पत्र प्रमाणीकरण कैसे सेट करें, इस दिशा में यहां से सलाह लें ।

नोट: के बाद आप परिवर्तन का उपयोग किया है sudo /etc/init.d/ssh restart। Ssh उपयोग के माध्यम से दूसरे पोर्ट से कनेक्ट करने के लिए ssh username@hostname.com -p <port_number>:।

एक फ़ायरवॉल सेटअप करें

कृपया बेहद शक्तिशाली और प्रभावी फ़ायरवॉल सेट करने के बारे में इस गाइड की जाँच करें , जिसे Linux, IPTables में एकीकृत किया गया है ।

सुरक्षा के साथ आपकी मदद करने के लिए स्क्रिप्ट सेट करें

एक है कि मैं व्यक्तिगत रूप से उपयोग करते हैं और जल्दी से मन में आता है Fail2Ban है । Fail2ban विफल लॉगिन प्रयासों के लिए आपकी लॉग फ़ाइलों की निगरानी करेगा। एक आईपी पते के प्रमाणीकरण प्रयासों की अधिकतम संख्या से अधिक हो जाने के बाद, इसे नेटवर्क स्तर पर ब्लॉक किया जाएगा और ईवेंट को लॉग इन किया जाएगा /var/log/fail2ban.log। इसे स्थापित करने के लिए:sudo apt-get install fail2ban

Ssh के माध्यम से कमांड इतिहास की जाँच करें

एक लिनक्स कमांड है, जिसका नाम है history, जो आपको यह देखने की अनुमति देता है कि उस बिंदु तक कौन से कमांड इनपुट किए गए हैं। historyउस बिंदु तक सभी आदेशों को देखने के लिए एक टर्मिनल में टाइप करने का प्रयास करें । यदि आप जड़ थे तो यह मदद कर सकता है ।

किसी विशेष कमांड के लिए खोज करने का प्रयास करें:history | grep command-name

Ssh के बाद सभी कमांड को सूचीबद्ध करने के लिए :fc -l ssh

आप vi का उपयोग करके भी आदेशों को संपादित कर सकते हैं (यह कोशिश नहीं की है, हालांकि मुझे लगता है कि यह भी काम करता है):fc -e vi

आप इतिहास को हटा भी सकते हैं :history -c

नोट: यदि आप कमांड के प्रशंसक नहीं हैं तो historyआपके होम डायरेक्टरी ( cd ~), .bash_history (यदि आप बैश का उपयोग कर रहे हैं ) में एक फ़ाइल भी है जिसे आप catबैश शेल में टाइप किए गए सभी को देख सकते हैं।


बहुत अच्छा जवाब। आपको @radu द्वारा पूछे गए गाइड को askubuntu.com/a/3906/59250
सेबर


3
  1. जेवियर ने पहले ही इसका उत्तर दिया: /var/log/auth.log
  2. मुझे यहाँ इसके बारे में एक बढ़िया लेख मिला है
  3. यदि आपके उपयोगकर्ताओं के पास रूट तक पहुंच नहीं है, तो आपकी लॉग फाइलें सुरक्षित होनी चाहिए। आप अपने उपयोगकर्ताओं के उपयोग और कैसे को प्रतिबंधित करने के लिए sudoers फ़ाइल में कुछ कस्टम नियम बनाने की कोशिश कर सकते हैं। इसके अलावा आप sshd डेमॉन के लिए लॉग स्तर बढ़ा सकते हैं।

3

लॉगिन के अलावा, उपयोगकर्ताओं के कार्यों को ट्रैक करने / लॉग इन करने का कोई सुरक्षित तरीका नहीं है, लॉग इन करने के बाद, यह मानते हुए कि उनके पास मूल लिनक्स ज्ञान है वे शेल लॉगिंग या बस अन्य शेल (जैसे अजगर) से चलने वाले कमांड को अक्षम करने में सक्षम होंगे।

इसके बजाय आपको ssh का उपयोग प्रदान करने के बारे में रूढ़िवादी होना चाहिए, क्या उन्हें वास्तव में इसकी आवश्यकता है? जब तक आप व्यवसाय प्रदान करने वाले शेल पर नहीं हैं, तब तक ssh एक्सेस देना बहुत आम नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.