Đây là một trong những câu hỏi quan trọng nhiều sys mới quản trị yêu cầu: Làm thế nào để kiểm toán (audit) các sự kiện tập tin như đọc/ghi vv? Làm thế nào tôi có thể sử dụng audit để xem ai đã thay đổi một tập tin trong Linux? Câu trả lời là sử dụng hệ thống audit . Modern Linux kernel (2.6.x) đi kèm với daemon auditd. Nó chịu trách nhiệm viết hồ sơ audit vào ổ đĩa. Trong khi khởi động, các quy tắc trong /etc/audit.rules được đọc bởi daemon này. Bạn có thể mở tập tin /etc/audit.rules và thực hiện thay đổi như thiết lập vị trí tập tin audit log và tùy chọn khác. Các tập tin mặc định là đủ tốt để bắt đầu với auditd. Để sử dụng cơ sở audit bạn cần sử dụng các tiện ích sau đây => Auditctl - một lệnh để hỗ trợ việc kiểm soát hệ thống audit. Bạn có thể nhận được trạng thái, thêm hoặc xóa các quy tắc vào hệ thống kiểm tra hạt nhân. Thiết lập một đồng hồ trên một tập tin được thực hiện bằng cách sử dụng lệnh này: => Ausearch - một lệnh có thể truy vấn các audit daemon logs dựa trên các sự kiện trên các tiêu chí tìm kiếm khác nhau. => Aureport - một công cụ tạo báo cáo tóm tắt các audit daemon logs. Cài đặt gói audit Sử dụng lệnh yum hay up2date để cài đặt gói Mã: yum install audit Hoặc: Mã: up2date install audit Tự động bắt đầu dịch vụ auditd khi khởi động Mã: ntsysv Hoặc: Mã: chkconfig auditd on Bây giờ bắt đầu dịch vụ: Mã: /etc/init.d/auditd start Làm thế nào để tôi đặt một watch trên một tập tin cho kiểm toán? Chúng ta hãy nói rằng bạn muốn kiểm tra một tập tin /etc/passwd. Bạn cần phải gõ lệnh như sau: Mã: auditctl -w /etc/passwd -p war -k password-file Trong đó: -w /etc/passwd: Chèn một watch cho các đối tượng hệ thống tập tin tại đường dẫn của chúng. -p war: Thiết lập quyền hạn bộ lọc cho một hệ thống tập tin watch. Nó có thể là r cho đọc, w cho viết, x cho thực thi, a cho phụ thêm. -k password-file: Thiết lập một khóa lọc trên một file /etc/passwd (đồng hồ). Mật khẩu tập tin là một filterkey (chuỗi của văn bản có thể dài tới 31 byte). Nó là duy nhất dùng xác định các hồ sơ kiểm toán. Bạn cần sử dụng chuỗi mật khẩu tập tin hoặc cụm từ trong khi tìm kiếm các bản ghi kiểm toán. Chờ một thời gian hoặc người sử dụng bình thường có thể sử dụng các lệnh sau: Mã: grep 'something' /etc/passwd vi /etc/passwd Sau đây là các ví dụ khác: Các luật tập tin hệ thống audit Thêm một watch trên "/etc/shadow" với filterkey là "shadow-file" mà tạo ra các hồ sơ cho "đọc, viết, thực thi, và gắn thêm" vào "shadow" Mã: auditctl -w /etc/shadow -k shadow-file -p rwxa syscall audit rule Những quy tắc tiếp theo ngăn chặn kiểm toán cho mount syscall exits Mã: auditctl -a exit,never -S mount Thêm watch "tmp" với một filterkey NULL mà tạo ra các hồ sơ "thực thi" vào "/tmp" (tốt cho một máy chủ web) Mã: auditctl -w /tmp -p e -k webserver-watch-tmp syscall audit rule sử dụng pid Để xem tất cả syscalls thực hiện bởi một chương trình gọi là sshd (pid - 1005): Mã: auditctl -a entry,always -S all -F pid=1005 Làm thế nào để tìm ra người thay đổi hoặc truy cập một tập tin /etc/passwd? Sử dụng lệnh ausearch như sau: Mã: ausearch -f /etc/passwd Hoặc: Mã: ausearch -f /etc/passwd | less Hoặc: Mã: ausearch -f /etc/passwd -i | less Trong đó: -f /etc/passwd: Chỉ tìm kiếm tập tin này -i: Giải thích các thực thể số vào văn bản. Ví dụ, uid được chuyển đổi sang tên tài khoản. Ví dụ kết quả đầu ra: Mã: ---- type=PATH msg=audit(03/16/2007 14:52:59.985:55) : name=/etc/passwd flags=follow,open inode=23087346 dev=08:02 mode=file,644 ouid=root ogid=root rdev=00:00 type=CWD msg=audit(03/16/2007 14:52:59.985:55) : cwd=/webroot/home/lighttpd type=FS_INODE msg=audit(03/16/2007 14:52:59.985:55) : inode=23087346 inode_uid=root inode_gid=root inode_dev=08:02 inode_rdev=00:00 type=FS_WATCH msg=audit(03/16/2007 14:52:59.985:55) : watch_inode=23087346 watch=passwd filterkey=password-file perm=read,write,append perm_mask=read type=SYSCALL msg=audit(03/16/2007 14:52:59.985:55) : arch=x86_64 syscall=open success=yes exit=3 a0=7fbffffcb4 a1=0 a2=2 a3=6171d0 items=1 pid=12551 auid=unknown(4294967295) uid=lighttpd gid=lighttpd euid=lighttpd suid=lighttpd fsuid=lighttpd egid=lighttpd sgid=lighttpd fsgid=lighttpd comm=grep exe=/bin/grep Hãy để chúng tôi giải thích kết quả đầu ra audit(03/16/2007 14:52:59.985:55): Thời gian audit log uid = lighttpd gid = lighttpd: id người dùng trong định dạng số. Bằng cách sử dụng tùy chọn -i với lệnh, bạn có thể chuyển đổi hầu hết các dữ liệu số sang định dạng con người có thể đọc được. Trong ví dụ của chúng tôi, người sử dụng là lighttpd sử dụng lệnh grep để mở một tập tin exe = "/bin/grep": Lệnh grep sử dụng để truy cập tập tin /etc/passwd perm_mask = read: Tập tin được mở cho hoạt động đọc Vì vậy, từ các tập tin log bạn có thể thấy rõ người đọc tập tin sử dụng lệnh grep hoặc thay đổi vào một tập tin sử dụng soạn thảo văn bản vi/vim. Log files cung cấp rất nhiều các thông tin khác. Ví dụ hữu ích khác Tìm kiếm cho các sự kiện với ngày tháng và thời gian. Nếu như thời gian được bỏ qua, hôm nay được giả định. Nếu thời gian là bỏ qua, bây giờ được giả định. Sử dụng đồng hồ thời gian 24 giờ hơn là AM hay PM để xác định thời gian. Một ví dụ là ngày 10/24/05. Một ví dụ về thời gian là 18:00:00. Mã: ausearch -ts today -k password-file ausearch -ts 3/12/07 -k password-file Tìm kiếm một sự kiện phù hợp với các tên file thực thi được sử dụng tùy chọn -x. Ví dụ tìm ra những người đã truy cập /etc/passwd sử dụng lệnh rm: Mã: ausearch -ts today -k password-file -x rm ausearch -ts 3/12/07 -k password-file -x rm Tìm kiếm một sự kiện với tên người sử dụng nhất định (UID). Ví dụ tìm hiểu xem người dùng vivek (UID 506) cố gắng để mở /etc/passwd: Mã: ausearch -ts today -k password-file -x rm -ui 506 ausearch -k password-file -ui 506