วิธีบันทึกทุกคำสั่ง linux ไปที่ logserver


13

ฉันต้องการให้พิมพ์คำสั่งทุกคำสั่งเดียวเพื่อไปที่ logserver กำหนดค่าไว้แล้วคือ syslog-ng เพื่อส่งบันทึกทั้งหมดไปที่ logserver

ฉันสนใจวิธีการใด ๆ และทั้งหมดในการทำเช่นนี้ ฉันคาดหวังว่าจะมีการพูดคุยกับผู้ใช้อันธพาลและความปลอดภัย แต่วัตถุประสงค์หลักแรกคือเพื่อให้ได้รับการเข้าสู่ระบบ เซสชันทั้งหมดมีมากกว่า ssh แต่คำสั่งการเชื่อมต่อคอนโซลควรถูกบันทึกด้วย ฉันอยากให้สิ่งนี้เกิดขึ้นสำหรับเปลือกหอยใด ๆ แต่อันแรกนั้นสำคัญมาก (อีกครั้งฉันรู้ว่าผู้ใช้อันธพาลสามารถสร้างเชลล์ของตัวเอง ... )

คำตอบ:


29

นี่ไม่ใช่วิธีที่คุณจัดการกับปัญหา เมื่อคุณให้สิทธิ์การเข้าถึงเชลล์แก่ผู้ใช้คุณกำลังมอบหมายให้ผู้ใช้นั้นทำสิ่งใด ๆ ที่ตนมีสิทธิ์ที่เหมาะสม ลืมการบันทึกคำสั่งมีหลายวิธีในการเรียกใช้คำสั่งในระบบ Unix

ตัวอย่างเช่นผู้ใช้อาจเริ่มต้นไคลเอนต์อีเมล (คำสั่งเพียงลงทะเบียนเป็นpineตัวอย่าง) ในนั้นเขาเลือก "เขียน" ซึ่งเริ่มต้นที่หกและจาก VI เขาเปิดตัวคำสั่งใด ๆ :!cmdที่เขาต้องการผ่าน คำสั่งนี้ไม่ได้ถูกบันทึกไว้ที่ใดและจากมุมมองของระบบมันเป็นเหมือนแอพพลิเคชั่นตัวช่วยที่เรียกโดย VI เช่น grep หรือ sort pineคำสั่งเพียงเข้าสู่ระบบโดยเปลือกเป็น

ดูเหมือนว่าสิ่งที่คุณต้องการจริงจะเรียกว่าการตรวจสอบ เปิดใช้งานระบบย่อยการตรวจสอบและใช้auditctlคำสั่งและauditddaemon จากแพ็คเกจการตรวจสอบเพื่อควบคุมสิ่งที่บันทึกไว้ ข้อมูลเพิ่มเติมอยู่ในหน้าคู่มือauditctl (8)

โปรดทราบว่าการบันทึกทุกอินสแตนซ์กระบวนการนั้นอาจไม่เหมาะสม ตัวอย่างเช่น./configureแพคเกจซอฟต์แวร์ที่เรียบง่าย(สร้างโดยใช้ autotools) มีความโดดเด่นในการสร้างอินสแตนซ์กระบวนการนับพัน นี่จะทำให้บันทึกการตรวจสอบมีสัญญาณรบกวนมากจนยากที่จะวิเคราะห์ในภายหลัง


13

ติดตั้งacctแพคเกจ (ชื่อแพคเกจแตกต่างกันไปตาม distro หรือที่เรียกว่าการบัญชีกระบวนการ) และใช้lastcomm <username>:

[mithrandir]-[/home/sernin]-[1951] % lastcomm sernin
tr                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
tr                     sernin   pts/2      0.02 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
fortune                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xmodmap                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xrdb                   sernin   pts/2      0.00 secs Fri Nov 12 12:02
sh                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
cpp                    sernin   pts/2      0.00 secs Fri Nov 12 12:02

คุณยังสามารถค้นหาด้วย tty หรือชื่อคำสั่ง ตามปกติman lastcommสำหรับข้อมูลเพิ่มเติม


11

หากคุณยินดีที่จะทำการเขียนโปรแกรม C เพียงเล็กน้อยคุณสามารถทำได้โดยการเขียนไลบรารี่ที่ล้อมรอบเอ็กซีคิ้วล็อก syslog จากนั้น dlopen เป็นไลบรารี่ที่บรรจุ syscall ตัวจริง จากนั้นใน / etc / environment ตั้งค่า LD_PRELOAD เป็นพา ธ สำหรับไลบรารีที่คุณสร้าง

คุณจะต้องระมัดระวังเกี่ยวกับการป้อนลูปที่นี่ดังนั้นคุณอาจต้องการบันทึกเฉพาะ exec ของไบนารีบางตัวหรือแยกผู้อื่น (เช่น syslog) ออกจากการบันทึก


จริงๆแล้วมันมีประโยชน์มาก การค้นหาครั้งแรกของ wrapper execve แสดงถึง snoopy ( sourceforge.net/projects/snoopylogger ) ดูเหมือนว่าใกล้เคียงกับสิ่งที่ฉันกำลังมองหาอยู่แม้ว่าจะมีความละเอียดน้อยก็ตาม หลังจากการทดสอบฉันเห็นว่าฉันจะต้องได้รับการอนุมัติจากฝ่ายจัดการเพื่อให้อยู่ในสภาพแวดล้อมการผลิต (คำเตือนสำหรับทุกประเภทที่ชั่วร้ายของคุณ)
Leo

@Leo ตั้งแต่เวอร์ชัน 2.0.0 Snoopy รองรับการกำหนดรูปแบบบันทึกที่กำหนดเองเมื่อดำเนินการ. / config ดังนั้นการใช้คำฟุ่มเฟือยจึงไม่น่าเป็นปัญหาอีกต่อไป การเปิดเผยข้อมูล: ผู้ดูแล Snoopy ที่นี่
Bostjan Skufca

7

ฟังดูเหมือนว่าคุณกำลังมองหาอะไรบางอย่างเช่นrootsh ( man page ) ในการอ้างถึงหน้าคน:

Rootsh เป็น wrapper สำหรับเชลล์ที่บันทึกการกดคีย์ echoed และเอาต์พุตเทอร์มินัลทั้งหมดไปยังไฟล์และ / หรือ syslog

แม้จะมีชื่อสิ่งนี้สามารถใช้สำหรับผู้ใช้ใด ๆ


2

คุณน่าจะดีกว่าถ้าให้ผู้ใช้ใช้ sudo (หรือคล้ายกัน) เพื่อเรียกใช้คำสั่งที่คุณสนใจและไว้วางใจผู้ใช้ในระดับหนึ่ง เมื่อคุณเข้าใกล้สิ่งที่ "ควบคุมอย่างเต็มที่" ยิ่งยากที่จะติดตามสิ่งที่พวกเขากำลังทำอยู่ ตัวอย่างเช่นเมื่อเร็ว ๆ นี้ฉันได้ดูเครื่องมือเช่นนี้ ส่วนใหญ่พวกเขาเพียงสร้างบันทึกที่ยากต่อการจัดการหากคุณมีผู้ใช้และเครื่องจักรเพียงพอที่จะทำสิ่งที่คุ้มค่า :)

พิจารณาข้อมูลทั้งหมดที่คุณกำลังสร้าง คุณสนใจเรื่องนี้มากน้อยแค่ไหน อาจจะน้อยมาก - ดังนั้นคุณกำลังสร้างบันทึกที่ไร้ค่าส่วนใหญ่ การตรวจสอบสิ่งที่คุณสนใจจริง ๆ เช่นเดียวกับคนอื่น ๆ กำลังแนะนำอาจนำคุณไปสู่สถานะสุดท้ายที่ดีกว่า


1

Bash สามารถคอมไพล์ด้วยการสนับสนุน syslog ตั้งแต่ 4.1

มันไม่สามารถจะเข้าใจผิดได้ (บัญชีกระบวนการอาจจะดีกว่าสำหรับเรื่องนั้น) แต่ส่วนใหญ่เป็นการโต้ตอบกับผู้ใช้ ปริมาณควรจะจัดการได้มากขึ้นและคุณจะสามารถสลับไปยังสิ่งที่มีรายละเอียดมากขึ้นหากสงสัยว่ามีสิ่งผิดปกติ

ที่กล่าวมานี้เป็นวิธีที่ล่วงล้ำและในฐานะผู้ใช้ฉันคาดหวังคำเตือนความเป็นส่วนตัวที่เฉพาะเจาะจงมากก่อนที่คุณจะเริ่มทำเช่นนั้น


0

นอกจากนี้ยังมี sudosh ( http://sudosh.sourceforge.net ) ที่จะทำการบันทึกเซสชัน คุณมีตัวเลือกในการรันมันเป็นเชลล์ที่กำหนดไว้สำหรับผู้ใช้หรือผ่าน sudo มันติดตามการกำหนดเวลาสำหรับแต่ละเซสชั่นเช่นกันเพื่อให้คุณสามารถเล่นซ้ำเซสชั่นและดู (รวมทั้งแก้ไขเซสชั่นและ whatnot)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.