यह जानने के लिए कि किस आईपी ने ssh का उपयोग करके लिनक्स में एक निश्चित कमांड को निष्पादित किया है


10

एक सर्वर है जो ssh का उपयोग करके कई उपयोगकर्ताओं द्वारा एक्सेस किया जाता है। मैं यह पता लगाने की कोशिश कर रहा हूं कि किस उपयोगकर्ता ने एक निश्चित कमांड को निष्पादित किया है।

मैं वर्तमान में सर्वर का उपयोग करने वाले उपयोगकर्ताओं की सूची जान सकता हूं who इसके अलावा मैं कमांड का उपयोग करके निष्पादित कमांड की सूची जानूंगा history

लेकिन यह कैसे पता करें कि किस उपयोगकर्ता ने cp file1.sh file2.shसर्वर में एक कमांड को निष्पादित किया है? उपयोगकर्ता ने पहले से ही कमांड निष्पादित किया है और लॉग आउट किया है

जवाबों:


4

कनेक्ट करने वाला प्रत्येक नया उपयोगकर्ता sshdएक विशिष्ट PID के साथ एक नया सत्र बनाता है। आप pstreeप्रिंट करने के लिए उपयोग कर सकते हैं कि कौन से कमांड किस sshdसत्र से विरासत में मिले हैं , और फिर इस पीआईडी ​​को क्रॉस चेक इन करें /var/log/auth.log

उदाहरण (अज्ञात): मैंने एक ही दूरस्थ उपयोगकर्ता के साथ 3 सर्वरों के साथ एक दूरस्थ सर्वर में लॉग इन किया। मैं अब यह पता लगाना चाहता हूं कि कौन सा आईपी क्लाइंट आया जो कमांड को चलाता है watch date

$ pstree -p | grep watch
        |           |-sshd(15243)---sshd(15342)---bash(15343)---watch(15450)
$ sudo grep 15243 /var/log/auth.log
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: Accepted publickey for XXXXXXXXXX from 12.34.56.78 port 48218 ssh2
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: pam_unix(sshd:session): session opened for user XXXXXXXXXX by (uid=0)
Mar  7 15:37:44 XXXXXXXXXX sudo: XXXXXXXXXX : TTY=pts/7 ; PWD=/home/XXXXXXXXXX ; USER=root ; COMMAND=/bin/grep 15243 /var/log/auth.log

pstree -pदिखाता है कि watchआदेश sshdPID 15243 के साथ विरासत में मिला है। grepइस PID के लिए /var/auth/auth.logशो से पता चलता है कि यह IP 12.34.56.78 था जिसने इस सत्र की शुरुआत की। इसलिए यह भी उपयोगकर्ता है कि शुरू कर दिया है watch

historyविशेष रूप से इस उपयोगकर्ता के लिए खोजने के लिए, यह वही नहीं किया जा सकता है जो मैं देख सकता हूं जब सभी दूरस्थ उपयोगकर्ता एक ही स्थानीय एसएसएच उपयोगकर्ता का उपयोग कर रहे हैं। इसके अलावा, यह आसानी से खराब / निष्क्रिय / आदि हो सकता है, इसलिए यह वास्तव में विश्वसनीय नहीं है। यदि इसे इतिहास फ़ाइल में सहेजा गया है, तो आप बस cpकमांड को देख सकते हैं और फ़ाइल में पीछे की ओर देख सकते हैं, लेकिन यदि यह नहीं है, तो बहुत कुछ करने के लिए नहीं है।


यह इस त्रुटि को कहता है grep: /var/log/auth.log: No such file or directory:-(
मनु के मोहन

@ मनुमोहन: आपने यह नहीं बताया कि आप किस सिस्टम पर हैं। आरएचईएल / फेडोरा / वैज्ञानिक लिनक्स / आदि के तहत, प्रासंगिक फाइल है /var/log/secure
डैनियल एंडर्सन

एंडरसन मैं उबंटू का उपयोग कर रहा हूं
मनु के मोहन

@ManuKMohan: यदि /var/log/auth.log.1, आदि, मौजूद हैं, तो उन्हें देखने के लिए प्रयास करें कि क्या उनके पास जानकारी है। बाद में, पुनरारंभ करें rsyslog( sudo service rsyslog restart) और देखें कि क्या यह आबादी शुरू करता है auth.log, जिसे यह पहले से ही करना चाहिए। एसएसएचडी /var/log/auth.logउबंटू में डिफ़ॉल्ट रूप से लॉग करता है , इसलिए जब तक कि आपने स्पष्ट रूप से लॉगिंग लक्ष्यों को बदल नहीं दिया है /etc/ssh/ssd_configया /etc/syslog.conf(आप जांच सकते हैं कि कौन सी फाइल authयहां लॉग की गई है), यह होना चाहिए। यदि नहीं: कुछ ऊपर है :-)।
डैनियल एंडरसन

1

Bash द्वारा निष्पादित सभी आदेशों को लॉग करने के लिए आप इस दो पंक्तियों को / etc / प्रोफाइल या / etc / bashrc में जोड़ सकते हैं:

whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"                                                                                                  
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local3.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

यह उपयोगकर्ता के साथ हर निष्पादित कमांड को रिकॉर्ड करने के लिए syslog का उपयोग करेगा जिसने ऐसा किया है और यह इस तरह एक प्रारूप में आईपी पता है:

Jan  8 08:43:49 xpto local3.debug root: root@192.168.x.y [29385]: ls -al [0]

इसके अतिरिक्त आप अपने syslog कॉन्फ़िगरेशन (/etc/syslog.conf) के नीचे की रेखा को स्थानीय 3 संदेशों को एक विशिष्ट फ़ाइल पर पुनर्निर्देशित कर सकते हैं।

local3.*                                                /var/log/prompt.log

अब यह syslog-ngसुधार के रूप में है और विन्यास फाइल है /etc/syslog-ng/syslog-ng.conf
टिमो

1

आप इसके लिए स्नूपि का उपयोग कर सकते हैं ।

आपको लॉग संदेश प्रारूप की परिभाषा में आईपी =% {env: SSH_CLIENT} निर्दिष्ट करके कस्टम पर्यावरण चर (SSH_CLIENT) को लॉग करना होगा।

प्रकटीकरण: यहाँ स्नूपी अनुरक्षक।


0

यह मानते हुए कि आप बैश का उपयोग कर रहे हैं, historyकेवल आपको आपका कमांड लाइन इतिहास दिखाएगा । डिफ़ॉल्ट रूप से, यह ~/.bash_historyइतिहास के लिए पढ़ता है । ध्यान दें कि ऐसा कुछ करके (हालांकि अत्यधिक संभावना नहीं) बदला जा सकता है HISTFILE=/home/userFoo/.my_alt_history

यह मानते हुए कि आप बॉक्स पर रूट हैं, आप सभी उपयोगकर्ता की निर्देशिकाओं के माध्यम से स्कैन कर सकते हैं और यह देखने के लिए उनके इतिहास को पढ़ सकते हैं कि कौन इस कमांड को चला रहा है।


ओह, और अगर वे दकियानूसी हैं, तो वे आसानी से अपने इतिहास से इस आदेश को मिटा सकते हैं। यदि वे कमांड चलाने वाले बॉक्स पर सक्रिय रूप से हैं, तो आप इसे देख सकते हैंps -aux | grep "cp file1.sh file2.sh"

सभी उपयोगकर्ता दूरस्थ रूप से ssh का उपयोग कर सर्वर के एक ही उपयोगकर्ता नाम तक पहुँच रहे हैं। मैं जानना चाहता हूं कि किस आईपी ने इस उपयोगकर्ता तक पहुंच बनाई है और कमांड को निष्पादित किया है।
मनु के मोहन

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