उत्पादन सर्वर पर व्यवस्थापक द्वारा चलाए गए सभी आदेशों को लॉग करें


70

यह एक व्यक्तिगत उपयोगकर्ता नाम के माध्यम से सर्वर में प्रवेश करने और फिर sudo -iरूट बनने के लिए व्यवस्थापक की कंपनी की नीति है । दौड़ने पर sudo -i, सुडो नामक एक पर्यावरणीय चर पैदा करेगा SUDO_USER, जिसमें मूल उपयोगकर्ता का उपयोगकर्ता नाम है।

निम्नलिखित सिंटैक्स में किसी चीज़ के साथ syslog के भीतर सभी कमांड को लॉग करने का एक तरीका है :

${TIME/DATE STAMP}: [${REAL_USER}|${SUDO_USER}]: ${CMD}

एक उदाहरण प्रविष्टि होगी:

Sat Jan 19 22:28:46 CST 2013: [root|ksoviero]: yum install random-pkg

जाहिर है कि इसके ठीक ऊपर के सिंटैक्स का होना आवश्यक नहीं है, इसमें सिर्फ वास्तविक उपयोगकर्ता (जैसे रूट) का एक न्यूनतम, सुडो उपयोगकर्ता (जैसे। Ksoviero) को शामिल करना है, और पूर्ण कमांड जो चलाया गया था (जैसे। yum) यादृच्छिक- pkg स्थापित करें)।

मैंने पहले ही प्रयास किया है snoopy, लेकिन इसमें SUDO_USERचर शामिल नहीं था ।


13
आपको चाहिए auditd
माइकल हैम्पटन


1
क्या कोई इसे उत्तर के रूप में पोस्ट कर सकता है? कृपया शामिल करें कि मैं उपयोगकर्ताओं द्वारा चलाए जाने वाले सभी आदेशों को सख्ती से कैसे लॉग करूंगा। "ऑडिट ऑडिट करने के लिए संक्षिप्त परिचय" उपयोगी था, लेकिन इसमें वास्तविक कमांड लॉगिंग से संबंधित कुछ भी शामिल नहीं था (जहां तक ​​मैं वैसे भी बता सकता था)।
सोविएरो

1
ठीक है, मैंने साथ खेलना शुरू कर दिया है auditd, और जब मैंने इसे चलाए जा रहे सभी आदेशों को लॉग करने के लिए प्राप्त कर लिया है, तो इसमें SUDO_USERचर (या समतुल्य जानकारी) शामिल नहीं है, और मुझे इसे शामिल करने का कोई तरीका नहीं मिल रहा है। किसी भी तरह की सहायता का स्वागत किया जाएगा!
सोविएरो

1
और कंपनी क्या होगा करना प्रशासकों द्वारा दर्ज किए गए सभी आदेशों की इस रिकॉर्ड के साथ?
19

जवाबों:


82

अपडेट : 2 और चीजें जो टिप्पणियों में और अनुवर्ती प्रश्नों में पॉप अप हुई हैं:

  • auditdइस तरह से उपयोग करने से आपके लॉग वॉल्यूम में नाटकीय रूप से वृद्धि होगी, खासकर अगर सिस्टम कमांडलाइन के माध्यम से उपयोग में भारी है। अपनी लॉग अवधारण नीति को समायोजित करें।
  • Auditdमेजबान जहाँ वे बनाए जाते हैं पर लॉग उसी बॉक्स पर अन्य फ़ाइलों की तरह सुरक्षित होते हैं। अपने लॉग्स की अखंडता को बनाए रखने के लिए अपने लॉग को किसी दूरस्थ लॉग कलेक्शन सर्वर जैसे ELK या Graylog से फ़ॉरवर्ड करें। इसके अलावा, ऊपर के बिंदु पर जोड़कर, यह पुराने लॉग को अधिक आक्रामक रूप से हटाने की अनुमति देता है।

जैसा कि माइकल हैम्पटन ने सुझाव दिया था, auditdयहाँ नौकरी के लिए सही उपकरण है।

मैंने इसे एक Ubuntu 12.10 इंस्टॉलेशन पर परीक्षण किया है, इसलिए आपका माइलेज अन्य प्रणालियों पर भिन्न हो सकता है।

  • स्थापित करें auditd:

    apt-get install auditd

  • इन 2 पंक्तियों को इसमें जोड़ें /etc/audit/audit.rules:

    -एक निकास, हमेशा -F आर्च = b64 -F euid = 0 -S निष्पादित करें
    -एक निकास, हमेशा -F आर्च = b32 -F euid = 0 -S निष्पादित करें

ये रूट ( euid=0) द्वारा संचालित सभी कमांड को ट्रैक करेंगे । दो नियम क्यों? execveSyscall दोनों 32 और 64 बिट कोड में ट्रैक किया जाना चाहिए।

  • auid=4294967295लॉग में संदेशों से छुटकारा पाने के audit=1लिए, कर्नेल के cmdline में जोड़ें (संपादन करके /etc/default/grub)

  • लाइन लगाएं

    session required pam_loginuid.so

सभी पीएएम फाइलों में, जो लॉगिन के लिए प्रासंगिक हैं ( /etc/pam.d/{login,kdm,sshd}), लेकिन उन फाइलों में नहीं जो प्रासंगिक हैं suया sudo। यह auditdकॉल uidकरते समय sudoया कॉल करते समय उपयोगकर्ता को सही ढंग से प्राप्त करने की अनुमति देगा su

  • अब अपने सिस्टम को पुनरारंभ करें।

  • आइए लॉगिन करें और कुछ कमांड चलाएँ:

    $ आईडी -यू
    1000
    $ sudo ls /
    बिन बूट डेटा देव आदि घर initrd.img initrd.img.old lib lib32 lib64 खो + पाया मीडिया mnt ऑप्ट रूट रूट रन sbin खरोंच selinux srv sys tmp usr var vmlinuz -mlinuz.old
    $ सुडो सु -
    # एलएस / आदि
    [...]

यह कुछ इस तरह से निकलेगा /var/log/audit/auditd.log:

----
time->Mon Feb  4 09:57:06 2013
type=PATH msg=audit(1359968226.239:576): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968226.239:576): item=0 name="/bin/ls" inode=2117 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968226.239:576):  cwd="/home/user"
type=EXECVE msg=audit(1359968226.239:576): argc=2 a0="ls" a1="/"
type=SYSCALL msg=audit(1359968226.239:576): arch=c000003e syscall=59 success=yes exit=0 a0=10cfc48 a1=10d07c8 a2=10d5750 a3=7fff2eb2d1f0 items=2 ppid=26569 pid=26570 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="ls" exe="/bin/ls" key=(null)
----
time->Mon Feb  4 09:57:06 2013
type=PATH msg=audit(1359968226.231:575): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968226.231:575): item=0 name="/usr/bin/sudo" inode=530900 dev=08:01 mode=0104755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968226.231:575):  cwd="/home/user"
type=BPRM_FCAPS msg=audit(1359968226.231:575): fver=0 fp=0000000000000000 fi=0000000000000000 fe=0 old_pp=0000000000000000 old_pi=0000000000000000 old_pe=0000000000000000 new_pp=ffffffffffffffff new_pi=0000000000000000 new_pe=ffffffffffffffff
type=EXECVE msg=audit(1359968226.231:575): argc=3 a0="sudo" a1="ls" a2="/"
type=SYSCALL msg=audit(1359968226.231:575): arch=c000003e syscall=59 success=yes exit=0 a0=7fff327ecab0 a1=7fd330e1b958 a2=17cc8d0 a3=7fff327ec670 items=2 ppid=3933 pid=26569 auid=1000 uid=1000 gid=1000 euid=0 suid=0 fsuid=0 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="sudo" exe="/usr/bin/sudo" key=(null)
----
time->Mon Feb  4 09:57:09 2013
type=PATH msg=audit(1359968229.523:578): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968229.523:578): item=0 name="/bin/su" inode=44 dev=08:01 mode=0104755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968229.523:578):  cwd="/home/user"
type=EXECVE msg=audit(1359968229.523:578): argc=2 a0="su" a1="-"
type=SYSCALL msg=audit(1359968229.523:578): arch=c000003e syscall=59 success=yes exit=0 a0=1ceec48 a1=1cef7c8 a2=1cf4750 a3=7fff083bd920 items=2 ppid=26611 pid=26612 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="su" exe="/bin/su" key=(null)
----
time->Mon Feb  4 09:57:09 2013
type=PATH msg=audit(1359968229.519:577): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968229.519:577): item=0 name="/usr/bin/sudo" inode=530900 dev=08:01 mode=0104755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968229.519:577):  cwd="/home/user"
type=BPRM_FCAPS msg=audit(1359968229.519:577): fver=0 fp=0000000000000000 fi=0000000000000000 fe=0 old_pp=0000000000000000 old_pi=0000000000000000 old_pe=0000000000000000 new_pp=ffffffffffffffff new_pi=0000000000000000 new_pe=ffffffffffffffff
type=EXECVE msg=audit(1359968229.519:577): argc=3 a0="sudo" a1="su" a2="-"
type=SYSCALL msg=audit(1359968229.519:577): arch=c000003e syscall=59 success=yes exit=0 a0=7fff327ecab0 a1=7fd330e1b958 a2=17cc8d0 a3=7fff327ec670 items=2 ppid=3933 pid=26611 auid=1000 uid=1000 gid=1000 euid=0 suid=0 fsuid=0 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="sudo" exe="/usr/bin/sudo" key=(null)
----
time->Mon Feb  4 09:57:09 2013
type=PATH msg=audit(1359968229.543:585): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968229.543:585): item=0 name="/bin/bash" inode=6941 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968229.543:585):  cwd="/root"
type=EXECVE msg=audit(1359968229.543:585): argc=1 a0="-su"
type=SYSCALL msg=audit(1359968229.543:585): arch=c000003e syscall=59 success=yes exit=0 a0=13695a0 a1=7fffce08a3e0 a2=135a030 a3=7fffce08c200 items=2 ppid=26612 pid=26622 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/bin/bash" key=(null)
----
time->Mon Feb  4 09:57:11 2013
type=PATH msg=audit(1359968231.663:594): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968231.663:594): item=0 name="/bin/ls" inode=2117 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968231.663:594):  cwd="/root"
type=EXECVE msg=audit(1359968231.663:594): argc=3 a0="ls" a1="--color=auto" a2="/etc"
type=SYSCALL msg=audit(1359968231.663:594): arch=c000003e syscall=59 success=yes exit=0 a0=7fff8c709950 a1=7f91a12149d8 a2=1194c50 a3=7fff8c709510 items=2 ppid=26622 pid=26661 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="ls" exe="/bin/ls" key=(null)

auidस्तंभ में रखे बुला उपयोगकर्ता की uidहै, जो आप के साथ इस उपयोगकर्ता द्वारा चलाए जा रहे आदेशों के लिए फ़िल्टर की अनुमति देता है

 ausearch -ua 1000

यह भी सूचीबद्ध करेगा उपयोगकर्ता रूट के रूप में भाग आदेश।

सूत्रों का कहना है:


+50 यह उत्तर सबसे अधिक व्यापक लगता है, हालाँकि मैं थोड़ा निराश हूँ कि यह जटिल होने के बजाय समाप्त हो गया। आपके सहयोग के लिए धन्यवाद।
ग्रासरूट

यह बताया जा सकता है कि ये परिवर्तन किसी के लॉग वॉल्यूम को /var/log/audit/audit.log में बहुत बढ़ा सकते हैं। इस फ़ाइल की मेरे लॉग मात्रा से अधिक audit.rules को twoexecve लाइनों को जोड़ने के बाद दोगुनी
जेडीएस

10

याद रखें कि sudo खुद ही सभी sudo कमांड को sloglog में लॉग करता है, इसलिए सभी निजी उपयोगकर्ताओं को केवल रूट शेल प्राप्त करने के लिए sudo नहीं बल्कि इसके लिए शिक्षित किया जाना चाहिए:

sudo command p1 p2 ... pn

इस या किसी भी दृष्टिकोण के बारे में मैंने जो सोचा है root, वह यह है कि उपयोगकर्ता के रूप में , किसी भी विशिष्ट प्रकार के लॉगिंग से उपयोगकर्ता को रोकना काफी मुश्किल है। इस प्रकार आपके द्वारा कोशिश की जाने वाली कोई भी चीज <100% होगी, मुझे यह कहते हुए खेद है।

शिक्षा, प्रलेखन, प्रवर्तन और सभी विश्वासों से ऊपर जो आवश्यक है।


3
मैं समझता हूं कि कुछ भी सही नहीं होगा, लेकिन हम कभी भी सभी को काम करने में सक्षम नहीं कर पाएंगे जैसे आप वर्णन करते हैं। ये वो
सादादिंस हैं जिनके

3
यह सच नहीं है .... कम से कम दो बहुत बड़ी कंपनियों में मैंने व्यक्तिगत रूप से काम किया है जिसमें बड़ी संख्या में सिस्टम प्रशासक शामिल हैं। फिर से, शिक्षा और प्रवर्तन के साथ यह काम करता है।
mdpc

2
mdpc 100% सही है। यह वही है जो सूडो कमांड के लिए है। मैं सैकड़ों मेजबानों के साथ दस sysadmins की दुकान में हूं, और हम हर चीज के लिए व्यक्तिगत sudo कमांड का उपयोग करते हैं - एक विशिष्ट नीति है जो su के माध्यम से रूट बनने से मना करती है। यह सुनिश्चित करने का एकमात्र उचित तरीका है कि व्यवस्थापक संचालन को ठीक से ऑडिट किया जाए।
जेफ अल्बर्ट

4
-1 एजुकेशन कभी नहीं करेगा। हम बाहरी दुनिया में रहते हैं, जहाँ आप अपने ग्राहकों के कई ग्राहकों में से एक हैं।
जमीनी स्तर

6

मैं एक बार एक ही समस्या का सामना कर रहा था और एक त्वरित और गंदे समाधान के साथ आना पड़ा - कमांड को चलाने के बाद प्रत्येक sudo उपयोगकर्ता का अपना इतिहास फ़ाइल होगा sudo -i

में /root/.bashrcमैं निम्नलिखित लाइन जोड़ा -

 export HISTFILE=/root/.bash_history-$SUDO_USER
 export HISTTIMEFORMAT="%F %T "

इसलिए हर उपयोगकर्ता जो रूट करने के लिए sudos करता है, उसके पास एक इतिहास फ़ाइल होगी .bash_history-username।

एक अन्य विधि -

निम्न कोड को /root/.bashrcइसमें जोड़ें और यह उपयोगकर्ता नाम, sudo-user और कमांड को लॉग फाइल में जोड़ेगा, जहां कभी नोटिस स्तर निर्धारित होता है, सबसे अधिक संभावना है / var / log / संदेश।

function log2syslog
{
   declare COMMAND
   COMMAND=$(fc -ln -0)
   logger -p local1.notice -t bash -i -- "${USER}:${SUDO_USER}:${COMMAND}"
}
trap log2syslog DEBUG

क्रेडिट को - http://backdrift.org/log-bash-history-to-syslog-use-traps


अच्छा दृष्टिकोण, हालांकि काफी नहीं पूछा गया था। मैं एक ऑडिट या समान समाधान देखना चाहूंगा।
ग्रासरूट

ठीक है मैंने इसे ट्रैप विधि पर भरोसा करने के लिए अद्यतन किया है।
डैनियल टी।

3
और वैध उपयोगकर्ताओं के लिए, यह काम करता है। लेकिन अगर वह खाता क्रैक किया गया था, तो पटाखा जल्दी से चलाकर /bin/sh, unset HISTFILEया द्वारा बैश इतिहास को अक्षम कर सकता है /bin/bash --norc
स्टीफन लासवर्स्की

3

कई प्रतिष्ठान वास्तव में ऑडिट का उपयोग करने से रोकते हैं क्योंकि यह संसाधन गहन है और परिणामस्वरूप सेवा हमलों से इनकार करने का अवसर मिल सकता है।

एक समाधान नवीनतम कोर्न शेल को कॉन्फ़िगर करना है (ksh-93, http://kornshell.com/ देखें। विवरण के लिए) एक रूट syslog सर्वर में रूट के रूप में निष्पादित सभी कमांड लॉग करने के लिए, और फिर आपातकालीन स्थिति को छोड़कर नीति द्वारा आवश्यकता होती है स्थितियों, sysadmins व्यक्तिगत खातों के साथ लॉग ऑन करते हैं और सुडो के माध्यम से बढ़ाया कोर्न शेल को निष्पादित करते हैं। लॉग की जांच से पता चल सकता है कि किसी व्यवस्थापक ने अपनी पटरियों को कवर करने के लिए अनुमोदित शेल से एक और शेल लॉन्च किया है, और एसए को तब आवश्यक रूप से शिक्षित किया जा सकता है।


3

जब सत्र सक्षम होता है, तब सूडो के पास सुडोरेप्ले नामक कुछ होता है और बाद में फिर से चलाया जा सकता है, scriptकमांड के समान काम करता है जो टर्मिनल सत्र का एक प्रकार बनाता है जिसे बाद में scriptreplayकमांड के साथ फिर से जोड़ा जा सकता है ।


2

संस्करण 2.0.0 स्नूपी मनमाने ढंग से पर्यावरण चर को लॉग करने में सक्षम है।

हालांकि, हाल के योगदान ने बताया कि ट्टी के लॉगिंग स्वामी "कौन है, इसे जड़ के रूप में निष्पादित किया गया" के सवाल का काफी प्रभावी और सुरुचिपूर्ण जवाब है।

प्रकटीकरण: मैं स्नूपी मेंटेनर हूं।


कृपया एक साधारण लिंक के बजाय ओपी की आवश्यकताओं के अनुसार इसे कैसे सेट करें, इस पर निर्देश प्रदान करें। धन्यवाद।
एंड्रिया लज्जाज़ारो

1
-1। यह स्नूपॉपी के लिए सिर्फ एक प्लग है। आपने प्रकटीकरण का पालन किया, लेकिन आपने अपनी पोस्ट में प्रश्न का उत्तर नहीं दिया; आप बस अपने प्रोजेक्ट से जुड़े।
डंकन एक्स सिम्पसन

1

ऐसा नहीं है कि इस तरह के अन्य उत्तरों में से किसी के साथ कुछ भी गलत है, लेकिन अगर आप तय करते हैं कि sudoलॉगिंग syslogसंतोषजनक है, तो मैं एक शिकन सुझा सकता हूं: नेटवर्क के माध्यम से इसे दूरस्थ ऑडिट होस्ट में लॉग इन करें।

कि "अब मैं जड़ हो गया हूं, मैं अपनी खराबी के किसी भी निशान को लॉग से हटा सकता हूं" की समस्या के आसपास हो जाता है। अब आप स्थानीय बॉक्स पर रूट हो सकते हैं, लेकिन आप उस लॉग पैकेट को नेटवर्क से वापस नहीं बुला सकते हैं, और आपको (संभवतः) रिमोट ऑडिट होस्ट पर रूट विशेषाधिकार नहीं हैं।

मैं वर्षों से प्रबंधित कुछ नेटवर्क के साथ ऐसा कर रहा हूं, और इसके दो अन्य सिग्नल लाभ हैं:

सबसे पहले, सभी syslogs की जांच करने के लिए नेटवर्क पर एक जगह है, जो घटनाओं के बहुत आसान सहसंबंध की अनुमति देता है, और इसलिए जांच के लिए एक वन-स्टॉप शॉप है जैसे "जब junoशिकायत थी कि NFS सर्वर heraजवाब नहीं दे रहा था, तो क्या कोई भी इसके बारे में शिकायत कर रहा था एक ही समय में एक ही बात! यदि ऐसा है, तो heraसमस्या होने की संभावना है, आइए देखें कि उसने क्या लॉग इन किया है? यदि नहीं, तो junoनेटवर्क कनेक्शन अधिक संदिग्ध है, आइए देखें कि junoउस समय और क्या लॉग हुआ है। "

दूसरे, syslog लॉग रोटेशन आसान हो जाता है: आप कुछ दिनों से अधिक समय तक स्थानीय मेजबानों पर लॉग की प्रतियां नहीं रखते हैं, लेकिन आप यह सुनिश्चित करते हैं कि ऑडिट सर्वर में भारी मात्रा में डिस्क स्थान है, और सभी syslogs को कई वर्षों तक बनाए रखें। साथ ही अगर, कहते हैं, आप उन्हें फॉरेंसिक ऑडिट उद्देश्यों के लिए WORM मीडिया पर लिखना चाहते हैं, तो आपको केवल एक WORM ड्राइव खरीदना होगा।

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