ทำความรู้จักกับ syslogd
สำหรับผู้ดูแลระบบที่เป็นยูนิกซ์หรือลินุกซ์โดยทั่วไปแล้วก็จะมีความคุ้นเคยกับ Syslog เป็นอย่างดี เพราะผู้ดูแลระบบต้องจับตาดูความเป็นไปของระบบเป็นประจำ ล็อกไฟล์เป็นข้อมูลที่ความสำคัญมากที่สุด เป็นตัวที่บ่งชี้ถึงเหตุการณ์ที่เกิดขึ้นในช่วงเวลาหนึ่ง ทำให้ผู้ดูแลระบบสามารถค้นหาข้อบกพร่องหรือตรวจจับเหตุการณ์ที่ผิดปกติได้ และยังเป็นหลักฐานที่สำคัญเมื่อมีเหตุการณ์ละเมิดความปลอดภัยคอมพิวเตอร์เกิดขึ้น
เอกสารฉบับนี้จะแนะนำ syslogd ซึ่งเป็น daemon ที่สำคัญที่สุด และแนะนำวิธีการนำไปใช้งานโดยเฉพาะใน Red Hat Linux แต่ทั้งนี้ผู้ดูแลระบบยูนิกซ์ตระกูลอื่นๆ ก็สามารถศึกษาและนำไปประยุกต์ใช้งานได้ เพราะในยูนิกซ์อื่นๆ นั้นจะมีความแตกต่างกันในรายละเอียดเล็กน้อยเท่านั้น
ทำความรู้จักกับ syslogd
syslogd เป็นกลไกที่ใช้ในการเก็บข้อมูลล็อกของ kernel และ application บนระบบยูนิกซ์และลินุกซ์ เป็น daemon ที่ถูกติดตั้งมาให้พร้อมกับระบบปฏิบัติการในเกือบทุกระบบ โดยผู้ดูแลระบบสามารถปรับแต่งไฟล์ configuration เพื่อควบคุมการทำงานของ syslogd ได้ เช่น ให้ syslogd เก็บข้อมูลไปไว้ที่ไฟล์ใด หรือให้ส่งข้อมูลล็อกนี้ไปเก็บไว้ยังเครื่องอื่นในเครือข่าย
ข้อมูลล็อกที่ควบคุมโดย syslogd นั้น จะถูกกำหนดให้มีค่า facility และ priority โดยส่วนของ facility นั้น เป็นข้อมูลที่อธิบายถึงแหล่งกำเนิดของข้อมูลล็อกนั้นๆ เช่น ข้อมูลล็อกที่ส่งมาจากระบบเมล์ก็จะมี facility เป็น mail ส่วน priority นั้น จะแสดงถึงระดับความสำคัญของเหตุการณ์ที่เกิดสำหรับแต่ละ facility ทั้งนี้ข้อมูลล็อกทุกอันจำเป็นต้องมี facility และ priority เสมอ
ตารางแสดง facility| Facility | คำอธิบาย |
| auth | เกี่ยวข้องกับการทำ authentication |
| authpriv | การทำ private authentication เท่านั้น |
| cron | cron daemon |
| daemon | system daemons |
| kern | ส่วนของ kernel |
| lpr | line printer spooling system |
| sendmail และซอฟแวร์อื่นที่เกี่ยวกับเมล์ | |
| mark | ให้บันทึกเวลาขณะเกิดเหตุการณ์ด้วย |
| news | usenet news system |
| security | เหมือนกับ auth |
| syslog | ข้อมูลล็อกภายในของ syslogd |
| user | ส่วนของโปรเซสของ user |
| uucp | สำรองไว้สำหรับ UUCP |
| local0 - local7 | local messages |
ตารางแสดง priority
| Priority | คำอธิบาย |
| emerg | ภาวะฉุกเฉิน |
| alert | แจ้งเตือนเร่งด่วน |
| crit | ล่อแหลม |
| err | มีข้อผิดพลาด |
| warning | คำเตือน |
| notice | ข้อสังเกตุ |
| info | ข้อมูลทั่วไป |
| debug | สำหรับใช้ดีบักเท่านั้น |
/etc/syslog.conf
การทำงานของ syslogd นั้น จะขึ้นอยู่กับไฟล์ /etc/syslog.conf เป็นหลัก การแก้ไขใดๆ ที่เกิดขึ้นกับไฟล์นี้นั้น จะยังไม่มีผลต่อการทำงานของ syslogd ในทันที จะต้องทำการ restart syslogd service ใหม่เสียก่อน รูปแบบคำสั่งในไฟล์ /etc/syslog.conf นั้นมีรูปแบบดังนี้
facility.level action facility1, facility2.level action facility1.level1; facility2.level2 action *.level action *.level;badfacility.none action
หมายความว่า เมื่อมีข้อมูลล็อกที่มี facility และ level ที่ตรงหรือมากกว่ากับที่ตั้งไว้ ก็จะกระทำ action ตามที่กำหนดไว้ ทั้งนี้เพราะ level ที่ตั้งไว้นั้น เป็นค่า minimum ซึ่งหมายความว่าถ้าเราตั้ง level เป็น debug ก็จะคลอบคุลมทุก level ของ facility นั้นๆ เลย ทั้งนี้เราสามารถใช้เครื่องหมาย * แทนทุกๆ ค่าใน facility หรือ priority level นั้นๆ ได้ เช่น mail.* /var/log/mail หมายความว่าให้ syslogd เก็บข้อมูลล็อกของ mail ทุก level ไปไว้ยังไฟล์ /var/log/mail
ในขณะที่ level ที่เป็น none นั้น หมายความว่าไม่ให้สนใจ facility ที่ประกาศค่า level เป็น none เช่น
*.emerg;mail.none /var/log/emer.log
คือให้เก็บข้อมูลล็อกที่มี level เป็น emerg สำหรับทุก facility ยกเว้น mail facility
สำหรับ action นั้นสามารถเลือกได้ดังนี้คือ
- filename : เก็บข้อมูลล็อกนั้นลงในไฟล์ที่กำหนด
- @hostname : ส่งต่อข้อมูลล็อกไปยัง syslogd บน host ที่กำหนด
- @ipaddress : ส่งต่อข้อมูลล็อกไปยัง host ที่มี ip address ตามที่กำหนด
- user1, user2 : ส่งข้อมูลล็อกไปยังหน้าจอของ user ที่กำหนด ถ้า user เหล่านั้นยังล็อกอินอยู่ในระบบ
- * : ส่งข้อมูลล็อกไปยังทุกๆ user ที่ยังล็อกอินอยู่ในระบบ
- /dev/console เพื่อส่งข้อมูลล็อกไปยัง console device หรือ device อื่นๆ ตามที่ต้องการ
สำหรับ Red Hat นั้นได้ขยายความสามารถของ syslogd เพิ่มเติม โดยอนุญาตให้ข้อมูลล็อกสามารถถูกส่งแบบ pipe ไปยังไฟล์ได้ โดยแก้ไขใน syslog.conf และยังสามารถใช้เครื่องหมาย = และ ! ใน syslog.conf ได้
- โดยเครื่องหมาย = หมายถึง priority ที่กำหนดเท่านั้น
- เครื่องหมาย ! หมายถึง priority อื่นที่ไม่ใช่ priority นี้และสูงกว่า
ตัวอย่าง เช่น
mail.info ความหมายคือ ข้อมูลล็อกที่เกี่ยวข้องกับเมล์และมี priority เป็น info และสูงกว่า
mail.=info ความหมายคือ ข้อมูลล็อกที่เกี่ยวข้องกับเมล์และมี priority เป็น info เท่านั้น
mail.info;mail.!err ความหมายคือ ข้อมูลล็อกที่เกี่ยวข้องกับเมล์และมี priority เป็น info , notice และ warning
mail.debug;mail.!=warning ความหมายคือ ข้อมูลล็อกที่เกี่ยวข้องกับเมล์และมี priority ทุกระดับที่ไม่ใช่ warning
และ Red Hat นั้น โดยปกติจะเก็บข้อมูลล็อกไว้ในไฟล์ซึ่ง อยู่ภายใต้โฟลเดอร์ /var/log และถูกติดตั้งมาพร้อมกับ logrotate ซึ่งเป็นเครื่องมือที่ช่วยจัดการล็อกไฟล์ได้อย่างมีประสิทธิภาพ ปกติแล้วจะ rotate ล็อกไฟล์อาทิตย์ละครั้ง และจะเก็บล็อกไว้ 4 รอบ หรือ 1 เดือน ผู้ดูแลระบบสามารถปรับเปลี่ยนค่าเหล่านี้ได้ที่ /etc/logrotate.conf
ตัวอย่างของไฟล์ configuration สำหรับ stand-alone machine
#ในกรณีฉุกเฉินให้แจ้งเตือน user ทุกคนที่ล็อกอินอยู่ *.emerg * #เก็บข้อมูลล็อกที่สำคัญไว้ในไฟล์ *.warning;daemon,auth.info,user.none /var/log/messages #printer errors lpr.debug /var/log/lpd-errs
ตัวอย่างของไฟล์ configuration สำหรับ network client
#ในกรณีฉุกเฉินให้แจ้งเตือน user ทุกคนที่ล็อกอินอยู่ *.emerg;user.none * #ส่งข้อมูลล็อกที่สำคัญไปยังเครื่องที่ทำหน้าที่เก็บล็อก *.warning;lpr,local1.none @netloghost daemon,auth.info @netloghost #ส่งข้อมูลล็อกของ local ไปยังเครื่องที่ทำหน้าที่เก็บล็อก local2.info;local0,local7.debug @netloghost #printer errors lpr.debug /var/log/lpd-errs #ข้อมูลของ sudo ที่ local2 ให้เก็บไว้ในไฟล์ local2.info /var/log/sudo-logs #ข้อมูลของ kernel ให้เก็บไว้ในไฟล์ kern.info /var/log/kern.log ใน กรณีนี้ข้อมูลส่วนใหญ่จะถูกส่งไปยังเครื่องที่ทำหน้าที่เก็บล็อก ซึ่งหมายความว่าถ้าเครื่องนั้นไม่สามารถให้บริการได้ข้อมูลล็อกก็จะสูญไป ดังนั้นจึงควรเก็บข้อมูลล็อกบางส่วนไว้ที่เครื่องของตัวเองด้วย
ตัวอย่างของไฟล์ configuration สำหรับ central logging host
#ในกรณีฉุกเฉินให้ส่งข้อมูลไปยัง console และล็อกไฟล์โดยมีเวลากำหนดด้วย *.emerg /dev/console *.err;kern,mark.debug;auth.notice /dev/console *.err;kern,mark.debug;user.none /var/log/console.log auth.notice /var/log/console.log #ส่งข้อมูลล็อกที่ไม่ใช่ข้อมูลฉุกเฉินไปยังไฟล์ธรรมดา *.err;user.none;kern.debug /var/log/messages daemon,auth.notice;mail.crit /var/log/messages lpr.debug /var/log/lpd-errs mail.debug /var/log/mail.log #เก็บข้อมูลที่เกี่ยวข้องกับการทำ authorization เช่น sudo local2.debug /var/log/sudo.log local2.alert /var/log/sudo-errs.log auth.info /var/log/auth.log #และข้อมูลอื่นๆ local7.debug /var/log/tcp.log #ข้อมูลของ user user.info /var/log/user.log ข้อควรระวังคือ ในกรณีที่เวลาของแต่ละเครื่องไม่ตรงกันนั้นอาจจะก่อให้เกิดความยุ่งยากมากทีเดียว เพราะเวลาที่เขียนลงในล็อกไฟล์นั้นเป็นเวลาของเครื่องที่ทำหน้าที่บันทึกข็อมูลล็อก ไม่ได้ดึงมาจากเครื่องที่ส่งข้อมูลล็อกมาให้แต่อย่างใด ดังนั้นจึงควรทำ clock syncronize ในทุกๆ เครื่อง
รายชื่อซอฟต์แวร์ที่ใช้ syslog
| Program | Facility | Levels | Description |
| amd | daemon | err-info | NFS automounter |
| date | auth | notice | Set the time and date |
| ftpd | daemon | err-debug | FTP daemon |
| gated | daemon | alert-info | Routing daemon |
| halt/reboot | auth | crit | Shutdown programs |
| inetd | daemon | err, warning | Internet super-daemon |
| login/rlogind | auth | crit-info | Login programs |
| lpd | lpr | er-info | BSD line printer daemon |
| named | daemon | err-info | Name server (DNS) |
| nnrpd | news | crit-notice | INN news reader |
| ntpd | daemon, user | crit-info | Network time daemon |
| passwd | auth | err | Password-setting program |
| popper | local0 | notice, debug | Mac/PC mail system |
| sendmail | alert-debug | Mail transport system | |
| su | auth | crit, notice | Switches UIDs |
| sudo | local2 | alert, notice | Limited su program |
| syslogd | syslog, mark | err-info | Internal errors, timestamps |
| tcpd | local7 | err-debug | TCP wrapper for inetd |
| cron | cron, daemon | info | System task-scheduling daemon |
| vmunix | kern | varies | The kernel |
สำหรับการดีบักหรือทดสอบการทำงานของ syslog ว่าทำงานหรือไม่นั้น สามารถทำได้โดยไม่ยากนัก เช่นเพิ่มบรรทัดด้านล่างนี้ใน syslog.conf
local5.warning /var/log/test.log
จากนั้นให้ restart syslogd ใหม่ แล้วจึงรันคำสั่ง #logger -p local5.warning "test" ซึ่งถ้าเป็นไปตามปกติแล้ว ในไฟล์ /var/log/test.log ก็จะมีคำว่า test ปรากฏอยู่ด้วย
สำหรับ Red Hat ที่ต้องการทำหน้าที่เป็นเครื่องที่ทำหน้าที่เก็บข้อมูลล็อกสำหรับเครื่องอื่นๆ ภายในเครือข่าย สามารถแก้ไขได้โดยเพิ่ม -r ใน startup options ของ syslog daemon โดยแก้ไขได้ที่ /etc/sysconfig/syslog หรือที่ /etc/rc.d/init.d/syslog
ข้อสังเกต
syslog นั้นเป็นมาตรฐานสำหรับการทำ logging ของยูนิกซ์และลินุกซ์ แต่ syslog กำลังจะถูกแทนที่โดย syslog-ng (syslog new generation) ซึ่งมีความยืดหยุ่นมากกว่า standard syslog และสามารถเก็บข้อมูลล็อกบนพื้นฐานของ regular expression ได้ ท่านสามารถหารายละเอียดเพิ่มเติมเกี่ยวกับ syslog-ng ได้ที่ http://www.balabit.hu/en/products/syslog-ng/ และ http://www.linuxgazette.com/issue43/scheidler.html
สำหรับการตรวจสอบล็อกไฟล์นั้น โดยปกติควรจะตรวจสอบอย่างน้อยวันละหนึ่งครั้ง แต่เนื่องจากล็อกไฟล์โดยส่วนใหญ่มักจะมีขนาดใหญ่ บางครั้งผู้ดูแลระบบเองอาจจะเผลอเรอหรือมองข้ามในบางจุดไป ซึ่งอาจจะก่อให้เกิดความเสียหายต่อระบบได้ การนำ Swatch และ Logwatch มาใช้งาน จะช่วยลดปัญหาเรื่องการสูญเสียเวลาได้ สำหรับ Swatch นั้น เป็น daemon ที่ทำหน้าที่ตรวจสอบรูปแบบ (pattern matching) ของล็อกไฟล์ เมื่อเจอข้อมูลที่ต้องการก็สามารถรัน script หรือโปรแกรมอื่นได้ เช่นอาจจะสั่งให้ส่งอี-เมล์ ส่งเสียงบี๊บ ท่านสามารถดาวน์โหลด Swatch ได้จาก http://www.oit.ucsb.edu/~eta/swatch/ และอ่านเอกสารประกอบได้ที่ http://www.enteract.com/~lspitz/linux.html ส่วน Logwatch นั้นรันบน cron job มีหน้าที่ในการตัดข้อมูลล็อกแล้วส่งผ่านอี-เมล์ไปยังผู้ดูแลระบบ ท่านสามารถดาวน์โหลด Logwatch ได้ที่ ftp://ftp.kaybee.org/pub/linux/logwatch-2.1.1.tar.gz
เนื่องจากการส่งข้อมูลล็อกไปยังเครื่องที่ทำหน้าที่เก็บข้อมูลล็อกอื่น นั้น ไม่มีกระบวนการของการตรวจสอบและยืนยันตัวตน และทำงานโดยใช้ UDP port 514 (user datagram protocol) ซึ่งเป็นโพรโตคอลที่ไม่มีการรับประกันการส่งข้อมูล และยังสามารถปลอมแปลง header ได้โดยง่าย ดังนั้นผู้ดูแลระบบควรติดตั้งไฟร์วอลล์เพื่อป้องกันไม่ให้เครื่องจากภายนอก ส่งข้อมูลล็อกมายังเครื่องที่ทำหน้าที่เก็บข้อมูลล็อกดังกล่าว
References
- The System Logging Daemons, syslogd and klog by Michael A. Schwarz
- Linux Security Auditing by Paul Whelan June 1, 2001
- Syslog-ng By Balazs Scheidler
- Configuring and using syslogd to collect logging messages on systems running Solaris 2.x
- Unix System Administration Handbook

0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home