Làm cách nào để tôi ghi nhật ký tất cả các lệnh shell UNIX được gửi bởi tất cả người dùng?


8

Có một cách thanh lịch để ghi nhật ký mọi lệnh được gửi trong tất cả các shell trên máy không? Đây là trong bối cảnh của một máy chủ Ubuntu được sử dụng không thường xuyên, trong đó tôi là người dùng duy nhất của con người. (Có một số tài khoản người dùng được sử dụng bởi các hệ thống tự động.)

Tôi muốn điều này là không phô trương và chi phí thấp, vì vậy tôi thích nó nếu có một phương pháp đơn giản liên quan đến một cái gì đó như script.

Câu trả lời:


9

Kể từ buổi bình minh (thực ra có từ thời mọi người phải trả tiền thật cho mỗi chu kỳ máy tính mà họ sử dụng) Unix và bản sao của nó đã có một hệ thống gọi là Process Accounting ( acct). Điều này cho phép các quản trị viên hệ thống biết chính xác những gì người dùng của họ đang làm và do đó có thể lập hóa đơn cho họ.

Các acctcơ sở vẫn tồn tại trong hầu hết các hệ thống Unix và Linux cho đến ngày nay.

Trang web này: http://www.cyberciti.biz/tips/howto-log-user-activity-USE- Process-accounting.html cho bạn biết cách kích hoạt nó.


Điều này cũng có thể được sử dụng để ghi nhật ký người dùng nào thực hiện sudo và su, và lệnh nào của root sau đó?
Daniel Beck

Tôi tin rằng nó ghi nhật ký mọi lệnh chạy, khóa bởi người dùng, tty, v.v.
Majenko

Cảm ơn bạn, tôi hoàn toàn không biết về tính năng này. Việc đọc nhanh các trang man cho thấy rằng việc ghi nhật ký tiếp tục cho đến khi đạt được điều kiện không gian đĩa thấp - do đó có lẽ cần một tập lệnh logrotate.
jl6

Tôi nghĩ kế toán quá trình chỉ đăng nhập chương trình nào chạy, không phải lệnh với tất cả các đối số của nó?
Sirex

2

Đây là một cách rất hay và nhanh chóng để ghi nhật ký tất cả các lệnh shell :

Bước 1:

Sử dụng trình soạn thảo văn bản yêu thích của bạn để mở / etc / bashrc và nối dòng sau vào cuối:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Bước 2:

Đặt syslogger để bẫy local6 vào tệp nhật ký bằng cách thêm dòng này vào tệp /etc/syslog.conf:

local6.*                /var/log/cmdlog.log

[Xem toàn bộ bài viết trên blog ở đây]


Tôi cảnh báo người dùng sẽ có thể vô hiệu hóa việc đặt lại biến này và vì nó được thực thi "trước khi đưa ra từng dấu nhắc chính" nên thực tế này sẽ không được ghi lại.
dmckee --- ex-moderator mèo con

2

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

Nó rất đơn giản để cài đặt và gỡ bỏ (không yêu cầu mô-đun kernel hoặc vá lỗi). Lưu ý rằng đây không phải là một giải pháp kiểm toán thích hợp và nó có thể dễ dàng bị phá vỡ.

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


Bostjan Skufca cũng đã cung cấp các hướng dẫn bổ sung để cài đặt snoopy trong Ubuntu tại đây và cũng trong một nhận xét bổ sung trong cùng một chủ đề ở đây .
karel

+1 để chụp ảnh; nó cung cấp một bản ghi tốt về lệnh và đối số trong /var/log/auth.log
David Goodwin

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.