Có một cách dễ dàng để ghi nhật ký tất cả các lệnh được thực thi, bao gồm các đối số dòng lệnh?


11

Tôi đang cố gắng tìm cách đăng nhập một khởi tạo cụ thể rrdtoolđể xem liệu đường dẫn mà nó nhận được có chính xác không.

Tôi biết rằng tôi có thể gói thực thi trong tập lệnh shell để ghi lại các tham số, nhưng tôi tự hỏi liệu có cách nào cụ thể hơn để theo dõi cho điều đó không, có lẽ là một cuộc gọi lại hệ thống tập tin nhìn thấy khi một / Proc / pid / exe cụ thể phù hợp với một nhị phân nhất định?


Có cách nào để auditdghi lại các đối số dòng lệnh cũng như chương trình đã chạy không? serverfault.com/questions/765179/ trộm
Neil

Câu trả lời:


16

Vâng, có một cơ sở hạt nhân: hệ thống con kiểm toán. Trình auditdnền thực hiện việc ghi nhật ký và lệnh auditctlthiết lập các quy tắc ghi nhật ký. Bạn có thể đăng nhập tất cả các cuộc gọi đến một hệ thống cụ thể, với một số bộ lọc. Nếu bạn muốn ghi nhật ký tất cả các lệnh được thực thi và các đối số của chúng, hãy ghi nhật ký execvecuộc gọi hệ thống:

auditctl -a exit,always -S execve

Để theo dõi cụ thể việc gọi một chương trình cụ thể, hãy thêm bộ lọc vào chương trình thực thi:

auditctl -a exit,always -S execve -F path=/usr/bin/rrdtool

Các nhật ký hiển thị /var/log/audit.loghoặc bất cứ nơi nào phân phối của bạn đặt chúng. Bạn cần phải root để kiểm soát hệ thống con kiểm toán.

Khi bạn đã điều tra xong, hãy sử dụng cùng một dòng lệnh -dthay vì -axóa quy tắc ghi nhật ký hoặc chạy auditctl -Dđể xóa tất cả các quy tắc kiểm toán.

Đối với mục đích gỡ lỗi, thay thế chương trình bằng tập lệnh bao bọc giúp bạn linh hoạt hơn để ghi nhật ký những thứ như môi trường, thông tin về quy trình cha, v.v.


Tại sao -F path=/ust/bin/rrdtool? Tôi không hiểu làm thế nào rrdtoollà phần mềm liên quan.
Graeme

@Graeme Vấn đề được mô tả trong câu hỏi là theo dõi một lời mời rrdtool. Nếu bạn muốn ghi nhật ký của tất cả các chương trình, hãy bỏ -F path=…phần đó (tất nhiên bạn sẽ nhận được rất nhiều nhật ký).
Gilles 'SO- ngừng trở nên xấu xa'

Phải ... dòng đầu tiên của câu hỏi. Cảm ơn.
Graeme

Điều này thật tuyệt, nhưng làm cách nào để thiết lập lại cấu hình của nó về trạng thái ban đầu? Nếu không, nó sẽ tiếp tục lấp đầy nhật ký bằng các lệnh mới và mới được khởi chạy ... hoặc auditctllệnh này chỉ có hiệu lực cho đến khi khởi động lại?
Ruslan

@Ruslan Hiệu quả của việc auditctlchỉ tồn tại cho đến khi khởi động lại, nhưng dù sao đó cũng là một điểm tốt, tôi đã thêm hướng dẫn xóa chúng mà không khởi động lại câu trả lời của mình.
Gilles 'SO- ngừng trở nên xấu xa'

6

Bạn có thể sử dụng snoopy .

Snoopy là giải pháp nhẹ hơn vì nó không cần sự hợp tác của kernel. Tất cả những gì cần thiết là trình tải động (dl) tải trước thư viện snoopy, đường dẫn được chỉ định trong /etc/ld.so.preload.

Tiết lộ: Tôi là người duy trì snoopy hiện tại.


Có thể thực hiện đăng nhập các lệnh trực tiếp hoặc gián tiếp sinh ra từ một shell cụ thể không?
rv

Tôi không chắc chắn tôi hiểu câu hỏi của bạn - bạn có nghĩa là "shell" là chương trình cụ thể được sử dụng như shell (bash, dash, zsh, v.v.), hoặc bạn có nghĩa là bạn muốn đăng nhập PTY cụ thể? Snoopy cung cấp khung lọc, nhưng hiện tại chỉ có một vài bộ lọc rất cơ bản được triển khai, xem tại đây để biết danh sách: link . Nếu bạn có một usecase cụ thể có thể áp dụng cho người khác, vui lòng giải thích trong yêu cầu tính năng, và, ồ, btw, các bản vá được chào đón :)
Bostjan Skufca

Tôi có nghĩa chỉ là một PTY cụ thể.
rv

Không có bộ lọc cụ thể cho ATM có sẵn PTY. Tuy nhiên, bạn có thể sử dụng snoopy để ghi nhật ký mọi thứ, bao gồm cả PTY mà sự kiện đã xảy ra và sau đó thực hiện lọc trong trình nền syslog của bạn. Tôi không biết bạn đang sử dụng cái nào, nhưng syslog-ng (ví dụ) có thể thực hiện kết hợp regex, tích cực hoặc tiêu cực.
Bostjan Skufca

Chắc chắn, cảm ơn! Các công cụ và cách tiếp cận nói chung là khá hữu ích. Tôi có thể dễ dàng thực hiện một số bộ lọc để có được những gì tôi cần.
rv

2

Hệ thống con "kiểm toán" nhân Linux có thể làm những gì bạn cần.

ví dụ: nếu bạn chạy các lệnh này:

auditctl -a exit,always -F arch=b64 -S execve
auditctl -a exit,always -F arch=b32 -S execve

Sau đó, mọi sự kiện thực hiện được ghi lại, và rất nhiều thông tin được cung cấp xung quanh đó

ví dụ: đây là đầu ra của tôi đang chạy tail /var/log/audit/audit.log

exit=0 a0=7f0e4a21e987 a1=7f0e4a21e6b0 a2=7f0e4a21e808 a3=8 items=2 ppid=906 pid=928 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="tail" exe="/usr/bin/tail" subj=kernel key=(null)
type=EXECVE msg=audit(1543671660.203:64): argc=2 a0="tail" a1="/var/log/audit/audit.log"
type=CWD msg=audit(1543671660.203:64):  cwd="/home/sweh"
type=PATH msg=audit(1543671660.203:64): item=0 name="/usr/bin/tail" inode=266003 dev=fd:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unlabeled objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PATH msg=audit(1543671660.203:64): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=273793 dev=fd:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unlabeled objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1543671660.203:64): proctitle=7461696C002F7661722F6C6F672F61756469742F61756469742E6C6F67

Có một số giá trị thú vị có thể được nhìn thấy; ví dụ: "auid" là 500, đó là ID đăng nhập của tôi, mặc dù "uid" bằng 0 ('tôi đang chạy theo su). Vì vậy, mặc dù người dùng có thể đã chuyển đổi tài khoản với suhoặc sudochúng tôi vẫn có thể theo dõi lại "ID kiểm toán" của họ

Bây giờ những auditctllệnh đó sẽ bị mất khi khởi động lại. Bạn có thể đặt chúng vào một tệp cấu hình (ví dụ: trong /etc/audit/rules.d/thư mục, trên CentOS 7). Vị trí chính xác sẽ phụ thuộc vào phiên bản HĐH của bạn. Các auditctltrang hướng dẫn sẽ giúp ở đây.

Hãy coi chừng, mặc dù ... điều này sẽ khiến rất nhiều thông điệp tường trình được tạo ra. Hãy chắc chắn rằng bạn có đủ dung lượng trên đĩa!

Nếu cần, các quy tắc có thể được giới hạn cho một người dùng cụ thể hoặc một lệnh cụ thể.

Và cũng hãy cẩn thận; nếu người dùng đặt mật khẩu trong lệnh thực thi (ví dụ mysql --user=username --password=passwd) thì điều này sẽ được ghi lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.