Nhiều sự kiện xảy ra trên hệ thống Linux của bạn nên được log lại cho mục đích quản trị. Linux sử dụng hệ thống syslogd để hiển thị và lưu thông tin miêu tả về các sự kiện này. Hệ thống này cho phép kiểm soát chặt chẽ logging của các messages từ kernel, từ các tiến trình đang chạy trên hệ thống, hoặc các hệ thống từ xa. Thông báo có thể hiển thị trên console, trong log files và trên màn hình text của người dùng trong hệ thống
Phần 1. Cấu hình syslogd
Những hành vi của syslogd được kiểm soát bởi file cấu hình của nó - /etc/syslog.conf (trên fedora 8 đã đổi thành rsyslog.conf). File text này cho biết những gì được log và log vào đâu. Mỗi dòng sẽ chứa đựng lời chỉ dẫn theo dạng
facility.level action
Lời chỉ dẫn này được định nghĩa như sau:
facility: đại diện cho đối tượng tạo ra thông báo (kernel, process), nó có thể nhận những giá trị sau:
- auth: sử dụng cho những sự kiện bảo mật
- authpriv: các thông báo liên quan đến kiểm soát truy cập và bảo mật
- cron: cron daemon
- daemon: sử dụng bởi các tiến trình hệ thống và các daemons khác
- kern: các thông báo từ kernel
- lpr: hệ thống in ấn
- mark: những thông báo được generated bởi bản thân syslogd. Nó chỉ chứa một biến timestamp và một chuỗi "--MARK--".
- news: hệ thống tin tức
- syslog: những thông báo được generated bởi bản thân syslogd.
- user: thông báo về cấp người dùng chung
- uucp: hệ thống con UUCP
- local0 to local7: dự trữ cho sử dụng nội bộ
Việc sử dụng facility cho phép bạn kiểm soát địa chỉ đến của messages dựa trên nguồn gốc của nó.
level: xác định một ngưỡng mà messages sẽ được logged. level có thể nhận các giá trị sau:
- debug: các messages ở chế độ debug
- info: messages mang thông tin
- notice: messages mang tính chất thông báo
- warning (hoặc warn): messages cảnh báo
- err (hoặc error): messages lỗi
- crit: messages nguy hiểm
- alert: messages về các hành động phải được thực hiện ngay
- emerg (hoặc panic): messages khi hệ thống không thể dùng được nữa
Ngoài ra còn một mức đặc biệt được gọi là none, mức này sẽ disable facility đi cùng. level định nghĩa một số lượng các bản ghi chi tiết trong log file. Dấu sao [*] có thể được sử dụng để miêu tả cho tất cả các facilities hoặc tất cả các levels.
action: đại diện cho địa chỉ của messages tương ứng với facility.level. action có thể là một tên file, một host name đứng trước ký tự @, hoặc một danh sách người dùng ngăn cách bằng dấu phảy, hoặc một dấu *.
Để hiểu rõ hơn về tất cả thành phần cũng như tham số này, bạn cần đọc man 5 syslog.conf
Ví dụ, để theo dõi các daemon bạn có thể thêm 1 dòng vào /etc/syslog.conf như sau:
Code:
# Define a new log file for daemon facility daemon.* /var/log/daemon.log
Bạn cần restart syslog để thay đổi này có hiệu lực:
Code:
$ sudo /sbin/service syslog restart Shutting down kernel logger: [ OK ] Shutting down system logger: [ OK ] Starting system logger: [ OK ] Starting kernel logger: [ OK ]
Tiếp theo bạn cần reboot để daemon.log được tạo trong /var/log
Để test, bạn có thể sử dụng tiện ích logger để gửi messages đến facility bằng shell script:
Code:
$ logger -p daemon.notice "This is a notice"
Thông báo "This is a notice" sẽ xuất hiện trong /var/log/daemon.log
# cat /var/log/daemon.log | grep notice
Dec 1 20:45:08 localhost quanta: This is a notice
Ví dụ về /etc/rsyslog.conf trên Fedora 8 của tớ:
Code:
# Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # Define a new log file for daemon facility daemon.* /var/log/daemon.log # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages # The authpriv file has restricted access. authpriv.* /var/log/secure # Log all the mail messages in one place. mail.* -/var/log/maillog # Log cron stuff cron.* /var/log/cron # Everybody gets emergency messages *.emerg * # Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler # Save boot messages also to boot.log local7.* /var/log/boot.log # # INN # news.=crit /var/log/news/news.crit news.=err /var/log/news/news.err news.notice /var/log/news/news.notice
Phần 2. Log File Rotation Phần lớn các distro sẽ cài đặt một cấu hình syslog mặc định cho bạn, bao gồm logging to messages và các log files khác trong /var/log. Để ngăn cản những files này ngày càng trở nên cồng kềnh và khó kiểm soát, một hệ thống quay vòng log file (a log file rotation scheme) nên được cài đặt. Hệ thống cron đưa ra các lệnh để thiết lập những log files mới, những file cũ được đổi tên bằng cách thay một con số ở hậu tố. Với loại quay vòng này, /var/log/messages của ngày hôm qua sẽ trở thành messages.1 của ngày hôm nay và một messages mới được tạo. Sự luân phiên này được cấu hình cho một số lượng lớn các file, và các log files cũ nhất sẽ được xoá khi sự luân phiên bắt đầu chạy. Ví dụ trong /var/log của tớ có các messages sau: messages, messages.1, messages-20071111, messages-20071118, ... Tiện ích thi hành rotation là logrotate. Lệnh này được cấu hình sử dụng cho một hoặc nhiều files - được xác định bởi các tham số đi cùng. File cấu hình mặc định là /etc/logrotate.conf. Ví dụ với Fedora 8 trên máy tớ: Code:
# see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { monthly create 0664 root utmp rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here.
Trong ví dụ này, bạn sẽ thấy:
- Hệ thống sẽ quay vòng log files hàng tuần
- Lưu lại những thông tin logs đáng giá trong 4 tuần
- Sử dụng định dạng Ngày tháng thêm vào để làm hậu tố của log files (20071111, 20071118, ...)
- Thông tin về sự quay vòng log của các gói RPM nằm trong /etc/logrotate.d
- rotation được thiết lập cho 2 files: /var/log/wtmp và /var/log/btmp
Phần 3. Examining Log Files Bạn có thể học được nhiều về cách hoạt động của hệ thống bằng cách xem lại các log files được tạo. Một lúc nào đó sẽ cần thiết để gỡ rối vấn đề gặp phải từ những thông tin đã được logged đó. Phần lớn các log files có dạng plain text, nó rất dễ dàng để xem lại với một vài lệnh như: tail, less, và grep Một dòng thông báo log được tạo với các thông tin sau, ngăn cách bởi 1 khoảng trắng (space)
- Date/time
- Origin hostname
- Message sender
- Message text
Một đoạn messages điển hình, trông giống như sau:
Code:
openvpn.net/howto.html#mitm for more info. Nov 21 14:42:13 localhost openvpn[1964]: Re-using SSL/TLS context Nov 21 14:42:13 localhost openvpn[1964]: LZO compression initialized Nov 21 14:42:13 localhost openvpn[1964]: Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Nov 21 14:42:13 localhost openvpn[1964]: Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Nov 21 14:42:13 localhost openvpn[1964]: Local Options hash (VER=V4): '41690919' Nov 21 14:42:13 localhost openvpn[1964]: Expected Remote Options hash (VER=V4): '530fdded' Nov 21 14:42:13 localhost openvpn[1964]: Socket Buffers: R=[110592->131072] S=[110592->131072] Nov 21 14:42:13 localhost openvpn[1964]: UDPv4 link local: [undef] Nov 21 14:42:13 localhost openvpn[1964]: UDPv4 link remote: 192.168.1.3:1194 Nov 21 14:42:13 localhost openvpn[1964]: read UDPv4 [ECONNREFUSED]: Connection refused (code=111)
Trong trường hợp này, hostname là localhost và messages đến từ dịch vụ openvpn. Bất cứ lúc nào bạn cũng có thể xem lại nội dung log files của bạn bằng cách dùng less
Code:
$ less /var/log/messages
hoặc tail
Code:
$ tail -f /var/log/messages
Để tìm kiếm các thông báo xác định về mouse, bạn có thể dùng grep
Code:
# grep '[Mm]ouse' /var/log/messages Dec 8 00:15:28 smp kernel: Detected PS/2 Mouse Port. Dec 8 10:55:02 smp gpm: Shutting down gpm mouse services:
Thông thường, nếu bạn sử dụng grep để tìm kiếm một item đặc biệt trong /var/log/messages, bạn sẽ cần phải tìm kiếm tất cả các rotated files với một wildcard (tạm dịch: ký tự đại diện). Chẳng hạn, để tìm kiếm tất cả các messages từ sendmail bạn cần:
Code:
# grep 'sendmail:' /var/log/messages*
Khi bạn xác định vấn đề từ log files, hãy nhìn vào hostname và sender đầu tiên, sau đó là messages text. Trong nhiều trường hợp bạn có thể xác định được cái gì là sai từ thông báo đó. Thi thoảng, những thông báo lỗi đó chỉ là đầu mối, và việc xem lại toàn bộ các logs của bạn là cần thiết. Trong trường hợp này, sẽ hữu ích nếu bạn tạm thời thay đổi level trong /etc/syslog.conf thành debug để log lại nhiều thông tin hơn giúp bạn giải quyết vấn đề.
Phần 4 (viết thêm): Logging syslog Messages to a Remote Linux Server
Nguồn: http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch05_:_Troubleshooting_Linux_with_syslog
Việc logging các thông báo của hệ thống đến một remote server cũng là một cách bảo mật tốt. Thuận lợi của việc này:
+ Tập trung các log files về một server trung tâm
+ Kiểm soát lỗi hoặc các hành động nguy hiểm một cách tốt hơn
+ Hành động xóa log files của kẻ xấu không thể xảy ra cùng một lúc nhất là khi bạn ngăn cản user truy cập đến logging server
Cấu hình syslog cho server
Theo mặc định thì syslog không nhận các thông báo từ remote clients. Để làm điều này bạn cần chỉnh /etc/sysconfig/syslog (trong Fedora 8 đã đổi thành rsyslog), và thêm một tuỳ chọn -r vào cuối tham sốSYSLOGD_OPTIONS
Nếu trên server bạn có dùng iptables, hãy chắc chắn rằng cổng 514 cho UDP đã được mở:
Nhớ restart iptables:
Code:
Cấu hình cho client
Syslog server đã có thể nhận các syslog messages. Ở client, bạn phải cấu hình để gửi messages đến nó. Để thực hiện điều này bạn cần sửa /etc/syslog.conf như sau:
Code:
Từ bây giờ, tất cả các messages có level là debug hoặc cao hơn đều được log tại server 192.168.1.3 cũng như tại local (/var/log/messages)
Hãy nhớ là chúng ta cần restart lại syslog
Code:
Test:
Trên client, bạn thử:
Code:
Trên server, kiểm tra xem đã nhận được syslog messages chưa:
Code:
Như vậy, việc gửi logging messages đến remote server đã thành công.
Nguồn: http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch05_:_Troubleshooting_Linux_with_syslog
Việc logging các thông báo của hệ thống đến một remote server cũng là một cách bảo mật tốt. Thuận lợi của việc này:
+ Tập trung các log files về một server trung tâm
+ Kiểm soát lỗi hoặc các hành động nguy hiểm một cách tốt hơn
+ Hành động xóa log files của kẻ xấu không thể xảy ra cùng một lúc nhất là khi bạn ngăn cản user truy cập đến logging server
Cấu hình syslog cho server
Theo mặc định thì syslog không nhận các thông báo từ remote clients. Để làm điều này bạn cần chỉnh /etc/sysconfig/syslog (trong Fedora 8 đã đổi thành rsyslog), và thêm một tuỳ chọn -r vào cuối tham sốSYSLOGD_OPTIONS
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-m 0 -r"
# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
# once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"
#
SYSLOG_UMASK=077
# set this to a umask value to use for all log files as in umask(1).
# By default, all permissions are removed for "group" and "other".
Nếu trên server bạn có dùng iptables, hãy chắc chắn rằng cổng 514 cho UDP đã được mở:
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 514 -j ACCEPT
Nhớ restart iptables:
Code:
# /sbin/service iptables restart Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables modules: [ OK ] Applying iptables firewall rules: [ OK ] Loading additional iptables modules: ip_conntrack_netbios_n[ OK ]ntrack_ftp
Cấu hình cho client
Syslog server đã có thể nhận các syslog messages. Ở client, bạn phải cấu hình để gửi messages đến nó. Để thực hiện điều này bạn cần sửa /etc/syslog.conf như sau:
Code:
*.debug @192.168.1.3 *.debug /var/log/messages
Từ bây giờ, tất cả các messages có level là debug hoặc cao hơn đều được log tại server 192.168.1.3 cũng như tại local (/var/log/messages)
Hãy nhớ là chúng ta cần restart lại syslog
Code:
$ sudo /sbin/service syslog restart Password: Shutting down kernel logger: [ OK ] Shutting down system logger: [ OK ] Starting system logger: [ OK ] Starting kernel logger: [ OK ]
Test:
Trên client, bạn thử:
Code:
$ sudo /sbin/service openvpn stop Shutting down openvpn: [ OK ]
Trên server, kiểm tra xem đã nhận được syslog messages chưa:
Code:
# tail /var/log/messages ... ... Dec 1 21:31:13 192.168.1.2 localhost openvpn[4507]: TCP/UDP: Closing socket Dec 1 21:31:13 192.168.1.2 localhost openvpn[4507]: SIGTERM[hard,] received, process exiting ... ...
Như vậy, việc gửi logging messages đến remote server đã thành công.
| ||
Let's build on a great foundation! | ||
[Hỏi đáp] Re: Cấu hình và sử dụng các log files của hệ thống | 01/12/2007 06:41:44 (+0700) | #16 | 101350 |
---|
|
|