Làm thế nào để ghi nhật ký tất cả các lệnh Bash của tất cả người dùng trên máy chủ?


21

Công ty nhỏ của chúng tôi chạy Ubuntu Server 11.10, mà một vài người có quyền truy cập SSH. Các thiết bị đầu cuối thực tế đôi khi cũng được sử dụng. Làm thế nào chúng ta có thể đăng nhập cục bộ tất cả các lệnh Bash chạy, cùng với dấu thời gian và người dùng?

Chúng tôi có thể cho rằng không ai là bất chính và chủ động cố gắng tránh đăng nhập, nhưng chúng tôi vẫn muốn người dùng không có quyền truy cập ghi trực tiếp vào tệp nhật ký của họ. Các phiên đồng thời phải được xử lý chính xác.

Câu trả lời:


32

Đối với shell BASH, hãy chỉnh sửa tệp cấu hình thời gian chạy BASH trên toàn hệ thống:

sudo -e /etc/bash.bashrc

Nối vào cuối tập tin đó:

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

Thiết lập ghi nhật ký cho "local6" với một tệp mới:

sudo -e /etc/rsyslog.d/bash.conf

Và nội dung ...

local6.*    /var/log/commands.log

Khởi động lại rsyslog:

sudo service rsyslog restart

Đăng xuất. Đăng nhập. Voila!

Nhưng tôi quên mất vòng quay log:

sudo -e /etc/logrotate.d/rsyslog

Có một danh sách các tệp nhật ký để xoay theo cùng một cách ...

/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message

Vì vậy, thêm tệp nhật ký bash-lệnh mới trong danh sách đó:

/var/log/commands.log

Tiết kiệm.


Quên về xoay vòng log mà tôi đã thêm vào câu trả lời.

1
Cách này hoạt động, nhưng tôi có thể phát minh ra một phương thức xung quanh nó (với csh, .bash_logout có lẽ). Tôi sẽ đi với giải pháp acct của Sabacon. Đây là những bài đọc tuyệt vời: linuxjournal.com/article/6144startedlinux.com/blog/2010/01/ Khăn

2
Tôi tin rằng điều này có thể dễ dàng bị vô hiệu hóa bởi người dùng chỉ bằng cách đặt lại hoặc bỏ cài đặt hoặc PROMPT_COMMANDthực thi vào trình bao không bash.
Stefan Lasiewski

1
@Benubird có vẻ như có một vài cấp độ cơ sở đặt trước, 8 trong số đó là local0-local7: en.wikipedia.org/wiki/Syslog . 0 có nghĩa là khẩn cấp, 7 có nghĩa là gỡ lỗi và 6 chỉ là 7, "thông điệp hoạt động bình thường".
munchybunch

1
@yukashima vì nhật ký có thể trở thành tệp lớn nếu không bị xóa, xoay có nghĩa là xoay tệp nhật ký và xóa tệp cũ để giữ nhật ký nhỏ hơn ...
Badr Elmer

4

Một hệ thống kế toán quy trình có thể hữu ích trong vấn đề này, đặc biệt là gói acct cung cấp các lệnh ac và Lastcomm.

Các lệnh ac in ra số liệu thống kê về thời gian kết nối của người dùng, tính bằng giờ. Đây là lượng thời gian mà người dùng đã được kết nối với hệ thống, từ xa thông qua SSH hoặc thiết bị đầu cuối nối tiếp hoặc trong khi trên bảng điều khiển.

Lệnh lastcomm hiển thị thông tin về các lệnh đã thực hiện trước đó. Các mục gần đây nhất được đưa ra ở đầu danh sách. Cũng hiển thị là tổng thời gian CPU mà mỗi quá trình sử dụng.

Một hướng dẫn cũ có thể hữu ích là ở đây:

http://www.linuxjournal.com/article/6144?page=0,1

Các lệnh kế toán khác như cuối cùng và vv có thể được tìm thấy trong hướng dẫn này:

http://www.techrepublic.com/article/system-accounting-in-linux/1053377


Lastcomm là khá vô nghĩa như một bộ ghi lệnh. Nó chỉ ghi lại các thực thi đã được chạy. Không có đối số, chuyển đổi hoặc đường dẫn được ghi lại.
Phil_1984_

3

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

Snoopy logger có thể phù hợp với mục đích của bạn. Đây không phải là giải pháp ghi nhật ký không thể tránh khỏi, mà là một công cụ hữu ích cho các quản trị viên siêng năng, những người thích theo dõi hành động của chính họ.

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


Vui lòng cung cấp hướng dẫn về cài đặt và sử dụng nó trong câu trả lời.
muru

1
Hướng dẫn cài đặt chi tiết có sẵn trên trang github snoopy, đây là tài nguyên snoopy chính ngay bây giờ: github.com/a2o/snoopy . Tôi một lần nữa cung cấp hướng dẫn cài đặt ở những nơi khác vì vị trí chính được duy trì bởi thiết kế và những nơi khác thì không. BTW Readme vừa được cập nhật để có cấu trúc hơn.
Bostjan Skufca

1
Co le vậy. Nhưng thậm chí không có một bản tóm tắt các bước cần thiết để sử dụng điều này, đây là một câu trả lời chỉ liên kết và có khả năng bị xóa.
muru

1
Vâng, tôi đã cung cấp một con trỏ đến một giải pháp thay thế và khả thi. Nếu đó không phải là tất cả những gì trang web này, thì bằng mọi cách, nó sẽ bị xóa, cùng với tài khoản của tôi.
Bostjan Skufca

2
@BostjanSkufca không cần phải xúc phạm. Đó chỉ là một thứ Stack Exchange để có ít nhất những câu trả lời hợp lý. Nếu bạn rất phản đối việc thêm các bước, đó là mong muốn của bạn. Downvote của tôi vẫn còn. Ai đó có thể sẽ nâng cao nó.
muru

3

Bạn có thể tìm thấy ở đây một tập lệnh để ghi nhật ký tất cả các lệnh bash / dựng sẵn vào tệp văn bản hoặc máy chủ nhật ký hệ thống mà không cần sử dụng bản vá hoặc công cụ thực thi đặc biệt.

Rất dễ triển khai, vì nó là một tập lệnh shell đơn giản cần được gọi một lần khi khởi tạo bash .

Nó là miễn phí và tôi hy vọng nó phù hợp với nhu cầu của bạn.


1
Đây là một câu trả lời hay nhưng tốt hơn là bao gồm các bước và tập lệnh trong phần thân của câu trả lời, thay vì liên kết đến blog của bạn. Bạn có thể vui lòng chỉnh sửa câu trả lời của bạn để bao gồm điều này?
Tom Brossman

2
Trang web hiện không khả dụng
Gaia

0

Để đảm bảo nhiều phiên không ghi quá nhiều tệp lịch sử, bạn sẽ phải đặt "shopt -s histappend" trong tệp khởi động Bash. Xem, câu hỏi này về cùng một vấn đề.


0

hãy thử điều này (các giải pháp trên sẽ không hoạt động 100% với bash 4.3):

export HISTTIMEFORMAT="%Y-%m-%d %T "
export PROMPT_COMMAND='trap "" 1 2 15; history -a >(tee -a ~/.bash_history | while read line; do if [[ $line =~ ^#[0-9]*$ ]]; then continue; fi; logger -p user.info -t "bash[$$]" "($USER) $line"; done); trap 1 2 15;'

điều này không ghi nhật ký VÀ nó ngăn chặn ghi nhật ký dấu thời gian được sử dụng cho tệp lịch sử bash. cái bẫy là cần thiết, vì bash sẽ gửi tín hiệu đến "subjob" sau khi nhấn strg + c nhiều lần (đã thử với bash 4.3). điều này sẽ buộc đăng xuất của người dùng hiện tại (ví dụ: đăng nhập bằng sudo)


0

Bạn cũng có thể thử cài đặt acct. Acct giữ một bản kiểm toán chi tiết về những gì đang được thực hiện trên các hệ thống Linux của bạn.

sudo apt-get install acct
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.