วิธีการติดตามกิจกรรม superuser


21

ฉันต้องการทราบว่าวิธีใดที่ดีที่สุดสำหรับการติดตามกิจกรรม superuser บนสภาพแวดล้อม Linux

โดยเฉพาะฉันกำลังมองหาคุณสมบัติเหล่านี้:

  • A) การบันทึกการกดแป้นพิมพ์ไปยังเซิร์ฟเวอร์ syslog ที่ปลอดภัย
  • B) ความสามารถในการเล่นซ้ำเซสชันของเชลล์ (คล้ายกับ scriptreplay)
  • C) ตามหลักแล้วนี่เป็นสิ่งที่เป็นไปไม่ได้ (หรือค่อนข้างยาก) ในการหลีกเลี่ยงโดยไม่ต้องเข้าถึงเซิร์ฟเวอร์

คิดเกี่ยวกับสิ่งนี้จากมุมมองด้านความปลอดภัย / การตรวจสอบในสภาพแวดล้อมที่จำเป็นต้องได้รับอนุญาตให้ดูแลระบบที่แตกต่างกัน (หรือบุคคลที่สาม) เพื่อดำเนินการสิทธิพิเศษบนเซิร์ฟเวอร์

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

หมายเหตุเพิ่มเติม :

  1. ตามที่ womble ได้ชี้ให้เห็นอาจเป็นตัวเลือกที่ดีที่สุดที่จะไม่มีคนลงชื่อเข้าใช้ด้วยสิทธิ์ root เพื่อทำการเปลี่ยนแปลงบนเซิร์ฟเวอร์ แต่แทนที่จะทำสิ่งนั้นผ่านระบบจัดการการตั้งค่า ดังนั้นสมมติสถานการณ์ที่เราไม่ได้มีระบบดังกล่าวและเราจำเป็นต้องให้สิทธิ์การเข้าถึงระดับรากกับคนที่แตกต่างกันมากกว่าเซิร์ฟเวอร์เดียวกัน
  2. ฉันไม่สนใจเลยที่จะทำสิ่งนี้อย่างลับ ๆ ล่อใจ: ทุกคนที่ลงชื่อเข้าใช้เซิร์ฟเวอร์ที่มีสิทธิ์ใช้งานรูทจะทราบว่าเซสชันนั้นจะถูกบันทึกไว้ (เช่นเดียวกับที่ผู้ดำเนินการศูนย์บริการรู้ว่าการสนทนาของพวกเขานั้น กำลังบันทึก)
  3. จะไม่มีใครใช้บัญชี superuser ทั่วไป ("root")
  4. ฉันรู้เกี่ยวกับttyrpldและดูเหมือนว่าจะทำสิ่งที่ฉันกำลังมองหา แต่ก่อนที่จะไปทางนั้นฉันอยากจะรู้ว่าสิ่งนี้สามารถแก้ไขได้โดยใช้เคอร์เนลที่ไม่ได้แก้ไข ฉันต้องการทราบว่ามีเครื่องมือใด ๆ สำหรับ Debian โดยเฉพาะ (หรือ Linux โดยทั่วไป) ที่อนุญาตให้ทำการตรวจสอบบัญชี superuser อย่างเต็มรูปแบบโดยไม่ต้องแก้ไขเชลล์หรือเคอร์เนล

2
(เก้าอี้คว้าและข้าวโพดคั่ว) นี้ควรจะดี ...
เอเวอรี่เพน

+1 ... กำลังคิดสิ่งเดียวกัน LOL
KPWINC

นอกจากนี้โปรดทราบคำถามที่เกี่ยวข้องนี้: serverfault.com/questions/46614/…
sleske

ฉันยังคิดว่าคุณควรใช้ระบบการจัดการการกำหนดค่า (หุ่น / cfengine / พ่อครัว / systemimager / พ่อครัว / etc ... )
KevinRae

เควินฉันเห็นด้วยกับคุณ ดูตัวอย่างความคิดเห็นของฉันที่จะตอบ womble ของ: serverfault.com/questions/50710/... น่าเสียดายที่นี่ไม่ใช่ตัวเลือกในสภาพแวดล้อมนี้และนั่นเป็นเหตุผลที่ฉันขอให้สมมติสถานการณ์ที่ระบบการจัดการการกำหนดค่าไม่พร้อมใช้งาน อย่างไรก็ตามฉันขอขอบคุณสำหรับความคิดเห็นของคุณในหัวข้อนี้
mfriedman

คำตอบ:


8

สำหรับสภาพแวดล้อมที่มีผู้ดูแลระบบหลายคนอย่าใช้รูท - ถ้าเป็นไปได้

ใช้ sudo สำหรับทุกสิ่ง - sudo สามารถกำหนดค่าได้อย่างมากและสามารถล็อกได้ง่าย

เข้าสู่ระบบใด ๆ / ทั้งหมดเข้าสู่ระบบหรือ su เพื่อรากและตรวจสอบพวกเขาเป็นคนที่จะไปรอบ ๆ กฎที่จัดตั้งขึ้นของคุณ


3
ใช่ sudo มีการบันทึกที่ยอดเยี่ยม - รายการ "womble ran / bin / sh as root" ทั้งหมดเหล่านี้มีประโยชน์จริง หากไม่มีการจัดการการกำหนดค่าผู้คนจะกลายเป็นผู้เริ่มต้นที่จะทำงานของผู้ดูแลระบบและคนที่ต้องการทำสิ่งที่ชั่วร้ายก็สามารถทำสิ่งที่พวกเขาในเซสชันรูทเดียวกับการทำงานที่ถูกต้อง ปกที่สมบูรณ์แบบ
womble

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

2
นโยบาย: "sudo / bin / sh" = fired / สอบสวนแล้ว สวยใสแก้ปัญหาง่ายสวย
คาร์ล Katzke

5
มีหลายวิธีในการรับเชลล์จากโปรแกรมที่ผู้คนจะต้องเรียกใช้อย่างถูกต้องตามกฎหมาย (เช่นจาก sudo vi) ว่ามีเพียงเล็กน้อยในการบล็อก 'sudo /bin/sh'... ไม่ว่าคุณจะมั่นใจได้ว่าคุณ บล็อกทุกวิธีที่เป็นไปได้คุณเพิ่งจะออกความท้าทายเพื่อค้นหาวิธีปิดบังเพิ่มเติม ไม่ว่าในกรณีใด: a) บางครั้งจำเป็นต้องใช้ sudo / bin / sh และ b) เป็นปัญหาการจัดการไม่ใช่เทคโนโลยี
cas

Chris เป็นจุดสำคัญ: ปัญหาการจัดการไม่ใช่ปัญหาด้านเทคโนโลยี
คาร์ล Katzke

2

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

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


+1 ขอบคุณที่แนะนำ sudoshell และเป็นพิเศษสำหรับระบบการตรวจสอบของเคอร์เนลลินุกซ์ metion - นั่นอาจเป็นส่วนเสริมที่ยอดเยี่ยมสำหรับสิ่งที่ฉันพยายามจะทำ
mfriedman

2

สิ่งที่คุณสามารถทำได้คือใช้ ไลบรารี่นี้สำหรับ sudo มอบชื่อผู้ใช้ของตนเองให้ทุกคนและใส่ sudo -i ในโปรไฟล์ everyones วิธีนี้ทำให้พวกเขาสามารถเข้าถึงรูทได้ทันทีและทุกคำสั่งที่ใช้จะถูกบันทึกไว้


+1 ฉันไม่รู้เกี่ยวกับห้องสมุดนั้น ขอบคุณสำหรับการแชร์!
mfriedman

1

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

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

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


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

1

อย่างที่คนอื่น ๆ บอกว่าไม่มีทางใดที่จะล็อกผู้ใช้ด้วยการเข้าถึงรูทแบบสมบูรณ์ในแบบที่พวกเขาไม่สามารถปิดการใช้งานได้ แต่ถ้าคุณใช้เดเบียน / อูบุนตูก็ดูsnoopyซึ่งใกล้เคียงกับสิ่งที่คุณต้องการ

snoopy เป็นเพียงไลบรารีที่แบ่งใช้ที่ใช้เป็น wrapper ของฟังก์ชัน execve () ซึ่งจัดทำโดย libc เพื่อบันทึกการเรียกใช้ syslog (authpriv) ทุกครั้ง ผู้ดูแลระบบอาจพบว่า snoopy มีประโยชน์ในงานต่าง ๆ เช่นการตรวจสอบระบบเบา / หนักการติดตามการกระทำของผู้ดูแลระบบคนอื่น ๆ รวมถึงการได้รับ 'ความรู้สึก' ที่ดีเกี่ยวกับสิ่งที่เกิดขึ้นในระบบ


ขอบคุณสำหรับคำตอบ มันรองรับการบันทึกการกดแป้นหรือเพียงแค่การบันทึกคำสั่ง?
mfriedman

0

ฉันเห็นด้วยกับความคิดเห็นของคนพิการเกี่ยวกับการใช้ sudo สำหรับทุกสิ่ง แน่นอนมันทำให้การเข้าสู่ระบบง่ายขึ้นเล็กน้อย

ฉันยังเพิ่มการสำรองไฟล์ประวัติทุบตีเป็นระยะ ดูเหมือนจะถูกมองข้าม แต่บางครั้งก็อาจเป็นแหล่งข้อมูลที่ดีเยี่ยม ... เพียงแค่ถาม Goldman Sachs ;-)

http://www.guardian.co.uk/business/2009/jul/12/goldman-sachs-sergey-aleynikov


2
ฉันมีสคริปต์. bash_logout ที่ทำสำเนาบันทึกเวลาของประวัติไปที่ /var/lib/history/$user.$tty-or-IP.$yymmddhhss ถ้าฉันใส่ใจมากกว่านี้ฉันจะตั้งค่าบัญชีกระบวนการหรือเหมาะสม เครื่องมือตรวจสอบ ... แต่มันไม่ใช่เพื่อความปลอดภัยจริง ๆ ดังนั้นฉันจึงสามารถรู้ได้ว่าใครทำอะไรที่เป็นใบ้และบอกพวกเขาก) ไม่ต้องทำอีกและข) วิธีการทำอย่างถูกต้อง การเพิ่มระดับเบาะแสของรุ่นน้องเป็นปัญหามากกว่าความเชื่อใจ
cas

1
เตือนฉันถึงเรื่องราวที่มีพนักงานขายรุ่นเยาว์จัดการเงินล้านดอลลาร์ เขาคาดหวังว่าหัวหน้าจะไล่เขาออกไปจากนั้นเจ้านายก็พูดว่า "ไม่เลย! ฉันรู้สึกได้ถึง "ระดับเบาะแส" ของรุ่นน้องที่เพิ่มขึ้นเมื่อเราพูด ;-)
KPWINC

0

นั่นคงเป็นเรื่องยาก ...

รูทสามารถรันสคริปต์ที่ผ่านการทดสอบอย่างดีซึ่งสามารถละเมิดมาตรการรักษาความปลอดภัยทั้งหมด (ฆ่ากระบวนการตรวจสอบ), ล็อกไฟล์ฉีก / ตัดแต่ง ฯลฯ ... แต่ยัง ...

สมมติว่าผู้ดูแลระบบหลายคนที่ได้รับสิทธิ์รูทกำลังทำงานเป็นทีม และรูทก็สามารถฆ่ากระบวนการตรวจสอบได้เช่นกัน และน่าเสียดายที่การเข้าสู่ระบบ / รหัสผ่านกลายเป็นสาธารณะ หรือพวกเขาได้รับ บริษัท ที่ไม่ต้องการ

การสร้างบัญชีผู้ใช้หลายบัญชีด้วย UID 0 ถึงแม้ว่าจะไม่แนะนำก็ตาม

ใน / etc / ssh / sshd_config การเปลี่ยนบรรทัดเป็น: PermitRootLogin no

ขอแนะนำ ดังนั้นที่นี่ผู้ใช้เข้าสู่ระบบโดยใช้บัญชีปกติของเขา / เธอ (ประทับตรา datetime ถูกบันทึกไว้พร้อมกับ (ที่อยู่ IP อาจปลอมแปลง)) จากนั้นสลับไปที่รูท ใช้คำสั่ง su

และการเข้าสู่ระบบโดยตรงในฐานะที่เป็นรากจะถูกป้องกันเช่นนี้

เราต้องคิดสิ่งที่รากไม่สามารถทำที่นี่

sudo น่าจะดี การสำรองไฟล์ / etc ไฟล์การกำหนดค่าไดเรกทอรีควรจะดี / var / directory ไฟล์บันทึกควรถูกส่งอีเมลเป็นระยะหรือเก็บไว้ใน NFS แยกต่างหาก

วิธีการเกี่ยวกับการเขียนสคริปต์ที่รวม API จาก บริษัท Mobile Gateway ที่จัดกลุ่ม SMS ผู้ใช้รูททั้งหมดของโทรศัพท์มือถือซึ่งหนึ่งในนั้นไม่อยู่บ้าน ฉันรู้ว่ามันน่ารำคาญ แต่ก็ยัง

การทำลาย SSH ส่วนใหญ่เป็นปัญหา


0

เรามีการตั้งค่าต่อไปนี้ในเว็บไซต์ของลูกค้า:

  • ในทำนองเดียวกันเปิดให้ตรวจสอบกับ Kerberos ใน AD (บัญชีส่วนตัว)
  • การอนุญาตเฉพาะกลุ่มโฆษณาบางกลุ่มของผู้ดูแลระบบ Unix
  • กลุ่ม sudoers == กลุ่มโฆษณา
  • เอเจนต์ OSSEC HIDSบนทุกเซิร์ฟเวอร์และผู้จัดการบนเซิร์ฟเวอร์ที่มีความแข็ง
  • OSSEC Web UI
  • Splunk 3 พร้อมSplunk สำหรับ OSSEC

มันจะเข้าสู่ระบบทุกการใช้งาน sudo บนเซิร์ฟเวอร์และติดตามการเปลี่ยนแปลงใด ๆ กับไฟล์การติดตั้งแพคเกจกระบวนการที่น่าสงสัย ฯลฯ


0

เรามีเทอร์มินัลเซิร์ฟเวอร์หลายแห่งเพื่อเข้าถึงอุปกรณ์ทั้งหมดของเรานั่นหมายความว่าเราสามารถเข้าสู่สิ่งใดก็ได้จากเทอร์มินัลเซิร์ฟเวอร์หรือหากมีการเข้าถึงทางกายภาพ

Sshd บนเซิร์ฟเวอร์เทอร์มินัลได้รับการแก้ไขด้วยhttp://www.kdvelectronics.eu/ssh-logging/ssh-logging.htmlทำงานได้ดี แต่ไม่ได้รับการอัปเดตเป็นเวลานาน ฉันได้แก้ไขมันเล็กน้อยเพื่อใช้งานบน openssh 4.7 แต่ไม่สามารถทำเช่นนั้นได้ด้วย 5.1 แก้ไข sshd segfaults และตราบใดที่ฉันไม่มีเวลาพอที่จะแก้ไขปัญหานั้นฉันเกือบจะเปลี่ยนเป็น ttyrpld แล้ว


0

จนถึงตอนนี้นี่คือสิ่งที่ฉันมี:

  • sudosh : ดูเหมือนว่าจะสนับสนุน A และ B (ไม่แน่ใจเกี่ยวกับ A อย่างสมบูรณ์)
  • Sudoscript : ดูเหมือนว่าจะสนับสนุน B (Sudoscript มีองค์ประกอบที่เรียกว่า sudoshell และถ้านั่นคือสิ่งที่ romandas แนะนำขอบคุณสำหรับเคล็ดลับ)
  • Snoopy Loggerหรือsudo_exetrace : ไม่ใช่สิ่งที่ฉันกำลังมองหา แต่อาจเป็นส่วนเสริมที่ดี (ขอบคุณผู้ดูแลและผู้ดูแลระบบสำหรับลิงก์เหล่านั้น)

คุณรู้จักเครื่องมือที่คล้ายกันอื่น ๆ ที่ไม่เกี่ยวข้องกับการแพตช์เคอร์เนลหรือส่วนประกอบอื่น ๆ ของระบบหรือไม่?

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