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


यह व्यक्तिगत उपयोगकर्ता नाम के माध्यम से सर्वर पर लॉगिन करने के लिए व्यवस्थापक के लिए कंपनी नीति है, और फिर चलाएं 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

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

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


61
2018-01-20 04:35


मूल


आप की जरूरत है auditd। - Michael Hampton♦
यह है एक लेखा परीक्षा के लिए संक्षिप्त परिचय - Deer Hunter
क्या कोई इसे उत्तर के रूप में पोस्ट कर सकता है? कृपया उपयोगकर्ताओं द्वारा चलाए गए सभी आदेशों को कड़ाई से लॉग इन करने के लिए शामिल करें। "ऑडिट करने के लिए संक्षिप्त परिचय" उपयोगी था, लेकिन इसमें वास्तविक आदेश लॉगिंग से संबंधित कुछ भी शामिल नहीं था (जहां तक ​​मैं वैसे भी बता सकता हूं)। - Soviero
ठीक है, मैंने साथ खेलना शुरू कर दिया है auditd, और जब मैं इसे चलाने के सभी आदेशों को लॉग इन करने के लिए प्राप्त कर लिया है, इसमें शामिल नहीं है SUDO_USER परिवर्तनीय (या समकक्ष जानकारी), और मुझे इसे शामिल करने का कोई तरीका नहीं मिल रहा है। किसी भी तरह की सहायता का स्वागत किया जाएगा! - Soviero
और कंपनी क्या करेगी करना प्रशासकों द्वारा दर्ज सभी आदेशों के इस रिकॉर्ड के साथ? - ewwhite


जवाब:


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

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

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

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

  • इंस्टॉल करें auditd:

    apt-get install auditd

  • इन 2 लाइनों को जोड़ें /etc/audit/audit.rules:

    - बाहर निकलें, हमेशा -F arch = b64 -F euid = 0 -S निष्पादित करें
    - बाहर निकलें, हमेशा -F arch = b32 -F euid = 0 -S निष्पादित करें

ये रूट द्वारा चलाए गए सभी आदेशों को ट्रैक करेंगे (euid=0)। दो नियम क्यों? execve syscall 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 opt ​​proc रूट रन sbin scratch selinux srv sys tmp usr var vmlinuz vmlinuz.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

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

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


72
2018-02-04 09:16



+50 यह उत्तर सबसे व्यापक लगता है, हालांकि मैं थोड़ा निराश हूं कि यह जटिल हो गया है। आपके सहयोग के लिए धन्यवाद। - grassroot
सावधान रहें कि ये परिवर्तन किसी के लॉग वॉल्यूम को /var/log/audit/audit.log में बढ़ा सकते हैं। Audit.rules में दोexecve लाइनों को जोड़ने के बाद इस फ़ाइल में मेरी लॉग वॉल्यूम दोगुनी से अधिक है - JDS


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

sudo command p1 p2 ... pn

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

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


8
2018-01-20 06:46



मैं समझता हूं कि कुछ भी सही नहीं होगा, लेकिन हम आपके जैसा वर्णन करने के लिए हर किसी को काम करने में सक्षम नहीं होंगे। ये sysadmins हैं जिनके बारे में हम बात कर रहे हैं;) - Soviero
सच नहीं है .... कम से कम दो बहुत बड़ी कंपनियों मैंने व्यक्तिगत रूप से काम किया है जिसमें बड़ी संख्या में सिस्टम प्रशासकों के साथ यह नीति बहुत ही है! फिर, शिक्षा और प्रवर्तन के साथ यह काम करता है। - mdpc
एमडीपीसी 100% सही है। यह वही है जो सुडो कमांड के लिए है। मैं सैकड़ों मेजबानों के साथ दस sysadmins की एक दुकान में हूं, और हम सब कुछ के लिए व्यक्तिगत सूडो कमांड का उपयोग करते हैं - एक विशिष्ट नीति है जो su - के माध्यम से रूट बनने से मना करती है। यह सुनिश्चित करने का एकमात्र उचित तरीका है कि प्रशासन संचालन उचित रूप से ऑडिट किया जाता है। - Jeff Albert
-1 शिक्षा कभी नहीं करेगी। हम आउटसोर्स की दुनिया में रहते हैं जहां आप अपने सिसडमिन के कई ग्राहकों में से एक हैं। - grassroot


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

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

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

तो रूट करने के लिए sudos हर उपयोगकर्ता एक इतिहास फ़ाइल होगा। Bash_history- उपयोगकर्ता नाम।

एक और तरीका -

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

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/logging-bash-history-to-syslog-using-traps


5
2018-01-31 20:03



अच्छा दृष्टिकोण, हालांकि काफी नहीं पूछा गया था। मैं एक लेखापरीक्षा या इसी तरह के समाधान देखना चाहता हूँ। - grassroot
ठीक है मैंने इसे जाल विधि पर भरोसा करने के लिए अद्यतन किया है। - Daniel t.
और वैध उपयोगकर्ताओं के लिए, यह काम करता है। लेकिन अगर वह खाता क्रैक हो गया था, तो क्रैकर तेजी से चलकर बैश इतिहास को अक्षम कर सकता था /bin/sh, unset HISTFILE या /bin/bash --norc। - Stefan Lasiewski


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

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


3
2018-02-06 19:28





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

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

प्रकटीकरण: मैं स्नूपी रखरखाव हूँ।


3
2017-11-05 23:20



कृपया एक सरल लिंक के बजाय ओपी की आवश्यकताओं के अनुसार इसे कैसे सेट अप करें, इस पर निर्देश प्रदान करें। धन्यवाद। - Andrea Lazzarotto
-1। यह सिर्फ स्नूपी के लिए एक प्लग है। आपने प्रकटीकरण का पालन किया, लेकिन आपने अभी भी अपनी पोस्ट में दिए गए प्रश्न का उत्तर नहीं दिया; आप बस अपनी परियोजना से जुड़े हुए हैं। - Duncan X Simpson


सुडो को कुछ कहा जाता है sudoreplay जब सक्षम सत्र लॉग होते हैं और बाद में फिर से चलाया जा सकता है, तो इसी तरह काम करता है script कमांड जो टर्मिनल सत्र की एक टाइपस्क्रिप्ट बनाता है जिसे बाद में फिर से चलाया जा सकता है scriptreplay आदेश।


3
2018-04-21 21:09





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

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

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

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

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


1
2018-02-04 09:27