Cơ chế ghi nhật ký trong Linu

Một phần của tài liệu nhập môn linux và phần mềm mã nguồn mở (Trang 122 - 126)

Chương 12 Nhật ký

12.2Cơ chế ghi nhật ký trong Linu

Trong hệ điều hành Linux, nhật ký được ghi chép theo cả 2 cách tiếp cận nói trên. Một số phần mềm độc lập (apache, postfix, ...) thực hiện ghi nhật ký trực tiếp và tự quản lý các tệp nhật ký của mình. Một số phần mềm khác quản lý các sự kiện xảy ra trong phần mềm và gửi các thông báo đến một tiến trình quản lý chung (syslogd). Căn cứ vào cấu hình nhật ký do quản trị viên xác lập, syslogd sẽ tiến hành ghi các thông tin về các sự kiện xảy ra vào các tệp tương ứng. Cơ chế trao đổi thông tin giữa các tiến trình khác với syslogd được mô tả trong Hình 12.2.1. syslogd luôn sẵn sàng chờ các thông báo từ các ứng dụng khác trên cổng 514. Sau khi nhận được thông báo, căn cứ vào cấu hình của mình, syslogd lọc và ghi các thông báo vào các tệp đầu ra phù hợp. Ví dụ về cấu hình bộ lọc được chỉ ra trong Hình 12.2.2. Tệp cấu hình của syslogd gồm nhiều dòng, mỗi dòng gồm 2 trường phân cách nhau bằng dấu cách. Mỗi dòng mô tả một thao tác mà syslogd sẽ thực hiện khi thông báo thỏa mãn các tiêu chí được mô tả trong trường thứ nhất. Cú pháp của trường thứ nhất có dạng xxx.yyy, trong đó xxx là nguồn của thông báo (facility), yyy là mức độ ưu tiên xử lý của thông báo (priority). Linux phân biệt các loại facility sau:

• auth: các thông báo có liên quan đến bảo mật của hệ thống.

• authpriv: các thông báo liên quan đến kiểm soát truy cập.

• deamon: các thông báo từ các tiến trình hệ thống và các chương trình chạy thường trú (daemon).

Hình 12.2.1: Cơ chế hoạt động của syslogd

# Sample syslog.conf file that sorts messages by # mail, kernel, and "other", and broadcasts # emergencies to all logged-in users

# print most sys. events to tty10 and to the xconsole # pipe, and emergencies to everyone

kern.warn;*.err;authpriv.none |/dev/xconsole

*.emerg *

# send mail, news (most), and kernel/firewall msgs to # their respective log files

mail.* -/var/log/mail

kern.* -/var/log/kernel_n_firewall

# save the rest in one file

*.*;mail.none -/var/log/messages

• kern: thông báo từ nhân hệ điều hành

• mark: thông báo từ syslogd, dùng để đảm bảo thứ tự thời gian.

• user: thoogn báo đến từ các ứng dụng.

• local7: thông báo do quá trình khởi động sinh ra.

• *: bất cứ thông báo nào.

• none: không có thông báo nào.

Có 7 mức độ ưu tiên khác nhau của các thông báo:

• debug: Các thông báo chỉ dành cho việc gỡ lỗi trogn từng chương trình. Có thể không sử dụng đối với các hệ thống đang vận hành

• info: Các thông tin về hoạt động bình thường của các tiến trình. Phục vụ cho việc phát hiện các bất thường không thường xuyên xảy ra.

• notice: Thông tin về các hoạt động bình thường, tuy nhiên cần đặc biệt chú ý

• warning: Cảnh báo có khả năng xảy ra lỗi. Thông thường đây là các thông báo về các lỗi phần mềm tự xử lý được, tuy nhiên có thể gây ảnh hưởng tới các tiến trình khác.

• err: Có lỗi xảy ra, không xử lý được.

• crit: Có lỗi nghiêm trọng xảy ra, không xử lý được, ảnh hưởng tới nhiều tiến trình khác.

• alert: Có lỗi nghiêm trọng xảy ra, không xử lý được, chắc chắn sẽ ảnh hưởng tới đa số các tiến trình khác. Khuyến nghị các tiến trình nếu có thể kết thúc công việc để đảm bảo an toàn dữ liệu.

• emerg: Có lỗi nghiêm trọng xảy ra, không xử lý được, không đảm bảo hoạt động của hệ thống.

Các mức ưu tiên có thể phối hợp với các toán tử so sánh và logics như =,!,* và none. Toán tử = được hiểu là tất cả các thông báo có cùng hoặc hơn mức ưu tiên mô tả sau toán tử. ! lọc tất cả những thông báo không thỏa mãn biểu thức ưu tiên sau toán tử. * và none tương ứng với tất cả các mức ưu tiên và không mức ưu tiên nào được lựa chọn.

Trường thứ 2 của mỗi dòng chỉ ra thao tác mà syslogd sẽ thực hiện với thông báo. syslogd cho phép khai báo mềm dẻo các thao tác này. Các thao tác này có thể là: (adsbygoogle = window.adsbygoogle || []).push({});

• Ghi vào một tệp.

• Chuyển đến một đường ống (để thực hiện một lệnh chẳng hạn).

• Chuyển đến một tệp thiết bị.

• Chuyển đến một máy tính ở xa.

• Hiển thị thông báo cho NSD. Ví dụ

mail,uucp.notice;uucp.!=alert /var/log/mail

Cần chú ý là các mức ưu tiên chỉ là thỏa thuận giữa các tiến trình với nhau. Việc gửi thông báo với mức độ ưu tiên nào hoàn toàn do người làm ra chương trình chủ động. Đây có thể coi là một cơ chế rất mềm dẻo để phối hợp giữa các tiến trình, nhưng đồng thời cũng là một lỗ hổng về bảo mật. Bằng việc xem xét log, quản trị viên có thể có một cái nhìn tổng quan về các sự kiện xảy ra trong hệ thống. Tuy nhiên, với những quản trị viên chưa quen với hệ thống Linux, hoặc khi có một phần mềm nào đó thay đổi về vị trí khi nhật ký, việc tìm được các thông tin cần thiết gặp nhiều khó khăn.

Kiểm tra việc cấu hình nhật ký Để kiểm tra cấu hình nhật ký theo dòng, có thể sử dụng chương trình logger. Chương trình logger là chương trình cho phép gửi các sự kiện đến syslogd. Sau đó có thể kiểm tra xem các thông tin nhật ký có được lưu đúng vào vị trí dự định hay không.

logger -p daemon.warn "Day chi la kiem tra thoi"

Để có thể kiểm tra tất cả các mức ưu tiên, có thể viết một kịch bản cho shell

#!/bin/bash #

# Script to generate one log message per # priority level per facility

#

for i in {auth,authpriv,cron,daemon,kern,lpr,mail,mark,news,syslog,user,uucp,local0,local1,local2, local3,local4,local5,local6,local7} do

for k in {debug,info,notice,warning,err,crit, alert,emerg}

do

logger -p $i.$k "Test message, facility $i priority $k"

done done

Các tệp log mà quản trị viên thường xuyên phải quan tâm là:

• /var/log/message: Các thông báo chung của hệ thống.

• /var/log/auth.log: Nhật ký xác thực.

• /var/log/kern.log: Thông báo từ nhân Linux

• /var/log/cron.log: Thông báo từ việc thực hiện các thao tác tự động.

• /var/log/maillog: Nhật ký của Mail server

• /var/log/qmail/ : Nhật ký của Qmail.

• /var/log/httpd/: Nhật ký của Apache.

• /var/log/lighttpd: Nhật ký của Lighttpd.

• /var/log/boot.log : Các thông báo của quá trình khởi động.

• /var/log/mysqld.log: Nhật ký của MySQL

• /var/log/secure: Nhật ký của quá trình đăng nhập. (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu nhập môn linux và phần mềm mã nguồn mở (Trang 122 - 126)