ฉันคิดว่ามันน่าจะได้ผล บางครั้งการโพสต์ข้อความบันทึกจากสคริปต์ก็ค่อนข้างมีประโยชน์ ไม่ได้ตั้งใจให้ผู้ใช้สร้างมลพิษให้กับบันทึกของระบบ วิธีแก้ไขในความคิดของฉันคือการมีระบบบันทึกที่มีการกำหนดค่าอย่างดี ซึ่งจะป้องกันไม่ให้ผู้ใช้สร้างมลพิษในบันทึกหรือปลอมแปลงข้อความของระบบ ทำให้คุณสามารถระบุผู้ใช้ที่มีพฤติกรรมทำเช่นนั้นได้
ฉันใช้ rsyslogd
ฉันจึงใช้มันเป็นตัวอย่าง
ก่อนอื่นคุณต้องกำหนดค่า rsyslogd
ในการจัดเก็บตัวแปรบางอย่างจากซ็อกเก็ตจะเปิดขึ้น:
โมดูล (โหลด = "imuxsock"
SysSock.Annotate="เปิด"
SysSock.ParseTrusted="เปิด"
)
ด้วยสิ่งนี้ คุณจะสามารถเข้าถึงตัวแปรต่อไปนี้:
ปิด
: PID ของกระบวนการเข้าสู่ระบบ
uid
และ กิด
: UID และ GID ที่กระบวนการบันทึกทำงานเป็น
ชื่อแอป
: ชื่อของกระบวนการเข้าสู่ระบบ
ซม
: บรรทัดคำสั่งแบบเต็มของกระบวนการบันทึก
ในกรณีของ คนตัดไม้
, ปิด
จะเป็น PID ของ systemd-วารสาร
, และ ชื่อแอป
จะเป็นเสมอ systemd-วารสาร
.
ด้วยสิ่งเหล่านี้ คุณสามารถทำบางสิ่งได้:
เพียงเข้าสู่ระบบเหล่านี้
คุณสามารถใช้เทมเพลตที่มีตัวแปรเหล่านี้ เพื่อให้ดูว่ามีความคลาดเคลื่อนระหว่างข้อความและพารามิเตอร์ที่ได้รับหรือไม่ ในเทมเพลต คุณสามารถเข้าถึงตัวแปรเหล่านี้ได้ เช่น %$!pid%
. ตัวอย่างเช่น คุณใช้เทมเพลตแบบนี้:
$ template SomeLogFormat,"%TIMESTAMP:::date-rfc3339% <%pri-text%> %syslogtag%%msg% (บันทึกโดย pid=%$!pid% ทำงานเป็น %$!uid%)\n"
daemon.* /var/log/daemon.log;SomeLogFormat
จะให้รายการต่อไปนี้:
2021-10-27T18:27:54.638759+02:00 <daemon.info> sshd[986]: ยอมรับคีย์สาธารณะจากพอร์ต 127.0.0.19.8 65537 sha2: RSA 2e:45:25:54:6o:34:3a: z3:55:07:04 (แค่ของปลอม) (บันทึกโดย pid=540 ทำงานเป็น 1,000)
จากข้อความนี้ คุณสามารถดูได้ว่าข้อความนั้นถูกต้องหรือไม่ และถ้าไม่ใช่ คุณจะได้รับ UID ของผู้ใช้ที่อยู่ในอารมณ์ตลก โปรดทราบว่าแทนที่จะระบุพารามิเตอร์ทีละรายการ คุณสามารถใช้ %$!%
template ซึ่งจะบันทึกค่าข้างต้นในรูปแบบ JSON
เปลี่ยนเส้นทางผู้ใช้บันทึก
คุณสามารถวางบันทึกที่เขียนโดยผู้ใช้ลงในไฟล์แยกต่างหาก (อาจอยู่ในระบบไฟล์แยกต่างหาก เพื่อให้ผู้ใช้ไม่สามารถเติมเต็มระบบไฟล์รูทได้) คุณสามารถเปลี่ยนเส้นทางบันทึกทั้งหมดที่มาจากผู้ใช้ด้วยการกำหนดค่าต่อไปนี้:
ถ้า $!uid > 999 แล้ว /opt/log/user.log;SomeLogFormat
& หยุด
การใช้งานเทมเพลต (the ;SomeLogFormat
ส่วน) เป็นตัวเลือก ด้วยวิธีนี้ ทุกสิ่งที่มาจากสิ่งใดก็ตามที่มี UID มากกว่า 1,000+ จะถูกเขียนถึง /opt/log/user.log
. คุณยังสามารถแยกบันทึกผู้ใช้ตาม UID ได้ดังนี้:
$เทมเพลต userLogFile,"/opt/log/userlog_%$!uid%.log"
ถ้า $!uid > 999 แล้ว ?userLogFile;SomeLogFormat
& หยุด
ด้วยวิธีนี้ผู้ใช้ทุกคนจะมีเป็นของตัวเอง userlog_xxxx.log
ไฟล์.