ฉันเห็นสองวิธีที่ดีในการรับข้อมูลประเภทนี้ หนึ่งคือการเพิ่มการบันทึกจาก sshd ตัวเองและอื่น ๆ โดยทำการตรวจสอบที่เก็บ git บนดิสก์ เนื่องจากไม่มีใครให้ข้อมูลที่คุณต้องการเป็นรายบุคคลคุณอาจต้องการทำทั้งสองอย่างและเชื่อมโยงข้อมูลบันทึกโดยใช้เครื่องมือวิเคราะห์บันทึกภายนอกหรือตามความต้องการโดยใช้สายตามนุษย์และการประทับเวลา
การแก้ไข sshd
ตามค่าเริ่มต้นคุณไม่ต้องสงสัยเลยว่าคุณจะเห็นเมื่อผู้ใช้ล็อกอินและจากที่ไหนโดยใช้บันทึกการตรวจสอบความถูกต้อง ssh สิ่งที่คุณต้องการทำคือเปลี่ยนระดับที่คุณกำลังออกจากระบบ sshd ดังนั้นแก้ไข/etc/ssh/sshd_config
และค้นหาบรรทัดที่มีลักษณะดังนี้
#LogLevel INFO
และเปลี่ยนสิ่งนั้นเป็น
LogLevel VERBOSE
จากนั้นเริ่มบริการ sshd ใหม่ สิ่งนี้จะเพิ่มระดับการบันทึกของ sshd ทีละขั้นตอนซึ่งให้ข้อมูลเพิ่มเติมจำนวนมาก ลองดูตัวอย่างบันทึกการเข้าถึงระยะไกลของฉันหลังจากทำการเปลี่ยนแปลงนั้น
Nov 2 08:37:09 node1 sshd[4859]: Connection from 10.10.10.5 port 50445
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4860]: Postponed publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4859]: Accepted publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: pam_unix(sshd:session): session opened for user scott by (uid=0)
Nov 2 08:37:10 node1 sshd[4859]: User child is on pid 4862
Nov 2 08:40:27 node1 sshd[4862]: Connection closed by 10.10.10.5
Nov 2 08:40:27 node1 sshd[4862]: Transferred: sent 30632, received 7024 bytes
Nov 2 08:40:27 node1 sshd[4862]: Closing connection to 10.10.10.5 port 50445
Nov 2 08:40:27 node1 sshd[4859]: pam_unix(sshd:session): session closed for user scott
สิ่งสำคัญที่ควรสังเกตคือสองเท่า
- เราเห็นลายนิ้วมือของกุญแจสาธารณะที่ใช้ตรวจสอบฉัน
- เราเห็นเวลาประทับของการออกจากระบบของฉัน
การใช้ LogLevel เริ่มต้น (INFO) sshd จะไม่บันทึกรายการเหล่านั้น การรับลายนิ้วมือของกุญแจเป็นอีกขั้นตอนเดียว คุณต้องประมวลผลauthorized_keys
ไฟล์ที่เหมาะสมด้วย ssh-keygen เช่นนี้
[root@node1 ssh]# ssh-keygen -l -f /home/scott/.ssh/authorized_keys
4096 f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06 /home/scott/.ssh/authorized_keys (RSA)
ดังนั้นตอนนี้คุณรู้ข้อมูลชิ้นต่อไปนี้แล้ว:
- ชื่อผู้ใช้ที่เข้าสู่ระบบ
- เวลาที่ผู้ใช้เข้าสู่ระบบ
- คีย์สาธารณะใดที่ใช้สำหรับการตรวจสอบสิทธิ์
- เวลาที่ผู้ใช้ออกจากระบบ
ตอนนี้เรามีวิธีการแอ็ตทริบิวต์การกระทำของผู้ใช้ในเวลาที่กำหนดสมมติว่าผู้ใช้ทั้งสองไม่ได้เข้าสู่ระบบในเวลาเดียวกันเราสามารถเริ่มดูการเปลี่ยนแปลงที่เกิดขึ้นกับที่เก็บ
การตรวจสอบไดเรกทอรีด้วย Auditd
ดังที่ sysadmin1138 กล่าวว่านี่อาจเป็นกรณีการใช้งานที่ยอดเยี่ยมสำหรับระบบย่อย auditd หากคุณไม่ได้ใช้ distro ที่ใช้ RedHat อาจเป็นอะนาล็อก แต่คุณต้องค้นหามัน การกำหนดค่าสำหรับ auditd ค่อนข้างเข้มข้นและมีตัวเลือกการกำหนดค่าจำนวนมาก ได้รับความคิดของบางส่วนของตัวเลือก, กรุณาตรวจสอบนี้คำถามเกี่ยวกับน้องสาวของเราเว็บไซต์สำหรับผู้เชี่ยวชาญด้านความมั่นคงปลอดภัยสารสนเทศ
ฉันขอแนะนำให้ตั้งค่าสิ่งที่เรียกว่า "watch" ในไดเรกทอรีบนดิสก์ที่มีที่เก็บ git ของคุณ สิ่งนี้จะเป็นการแนะนำให้โมดูลเคอร์เนลรายงานความพยายามในการเรียกใช้การเข้าถึงไฟล์เช่นopen()
หรือcreat()
บนตัวจัดการไฟล์ที่ชี้ไปยังไฟล์หรือไดเรกทอรีที่เราแสดงรายการ
นี่คือตัวอย่างการกำหนดค่าที่จะทำเช่นนี้และเฉพาะที่นี่ ดังนั้นควรระมัดระวังในการอ่านและทำความเข้าใจกับสิ่งที่มีอยู่ของคุณ/etc/audit/audit.rules
เพื่อรวมการเปลี่ยนแปลงอย่างเหมาะสม
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 1024
-w /path/to/git/repos-p wa
# Disable adding any additional rules - note that adding *new* rules will require a reboot
-e 2