Làm thế nào để ghi nhật ký mọi lệnh linux vào máy chủ


13

Tôi muốn mỗi lệnh được gõ để đi đến một máy chủ. Đã cấu hình là syslog-ng để gửi tất cả các bản ghi đến máy chủ log.

Tôi quan tâm đến bất kỳ và tất cả các phương pháp để làm điều này. Tôi sẽ mong đợi một số cuộc thảo luận về người dùng lừa đảo và bảo mật nhưng mục tiêu chính đầu tiên là chỉ cần có được các phiên để đăng nhập. Tất cả các phiên đều qua ssh nhưng các lệnh kết nối giao diện điều khiển cũng nên được ghi lại. Tôi muốn điều này xảy ra cho bất kỳ shell nào nhưng cái chính là bash. (Một lần nữa, tôi biết một người dùng lừa đảo có thể tạo vỏ của riêng họ ...)

Câu trả lời:


29

Đây không phải là cách bạn tiếp cận vấn đề. Khi bạn cấp quyền truy cập shell cho người dùng, bạn sẽ ủy thác cho người dùng đó làm bất cứ điều gì anh ta / cô ta có quyền thích hợp. Quên ghi nhật ký lệnh, có quá nhiều cách để thực thi lệnh trong bất kỳ hệ thống Unix nào.

Ví dụ: người dùng có thể bắt đầu ứng dụng thư khách ( pineví dụ: lệnh duy nhất được ghi là ), trong đó anh ta chọn "Soạn" bắt đầu VI và từ VI, anh ta khởi chạy bất kỳ lệnh nào anh ta muốn thông qua :!cmd. Lệnh này không được ghi lại ở bất cứ đâu và theo quan điểm của hệ thống, nó giống như bất kỳ ứng dụng trợ giúp nào được gọi bởi VI, như grep hoặc sort. Lệnh duy nhất được ghi bởi shell là pine.

Có vẻ như những gì bạn thực sự muốn được gọi là kiểm toán . Kích hoạt hệ thống con kiểm toán và sử dụng auditctllệnh và auditdtrình nền từ gói kiểm toán để kiểm soát những gì được ghi lại. Thông tin chi tiết có trong trang hướng dẫn Audctl (8) .

Lưu ý rằng đăng nhập mỗi quá trình khởi tạo nó cũng có thể không tối ưu. Ví dụ, đơn giản ./configurecho gói phần mềm (được tạo bằng autotools) là đáng chú ý để tạo hàng ngàn quy trình tức thời. Điều này sẽ tràn ngập nhật ký kiểm toán với rất nhiều tiếng ồn đến nỗi nó trở nên rất khó để phân tích nó sau này.


13

Cài đặt acctgói (tên gói thay đổi theo distro, còn được gọi là kế toán quy trình) và sử dụng lastcomm <username>:

[mithrandir]-[/home/sernin]-[1951] % lastcomm sernin
tr                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
tr                     sernin   pts/2      0.02 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
fortune                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xmodmap                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xrdb                   sernin   pts/2      0.00 secs Fri Nov 12 12:02
sh                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
cpp                    sernin   pts/2      0.00 secs Fri Nov 12 12:02

Bạn cũng có thể tìm kiếm theo tty hoặc tên lệnh. Như thường lệ, man lastcommđể biết thêm.


11

Nếu bạn sẵn sàng thực hiện một chương trình C nhỏ, bạn có thể làm điều này bằng cách viết một thư viện bao bọc thực thi, ghi nhật ký vào syslog, sau đó là thư viện chứa tòa nhà thực thi thực sự. Sau đó, trong / etc / môi trường, đặt LD_PRELOAD thành đường dẫn cho thư viện bạn đã tạo.

Bạn sẽ muốn cẩn thận về việc nhập một vòng lặp ở đây, vì vậy bạn có thể chỉ muốn ghi nhật ký của một số nhị phân nhất định hoặc loại trừ những người khác (như syslog) khỏi bị đăng nhập.


Trên thực tế, điều này là khá hữu ích. Tìm kiếm đầu tiên trên trình bao bọc execve đưa ra snoopy ( sourceforge.net/projects/snoopylogger ). Nó có vẻ gần với những gì tôi đang tìm kiếm, mặc dù hơi dài dòng. Sau khi thử nghiệm tôi thấy rằng tôi sẽ cần sự chấp thuận của ban quản lý để đưa nó vào môi trường sản xuất. (Một cảnh báo cho tất cả các loại bạn bất chính)
Leo

@Leo Vì phiên bản 2.0.0 Snoopy hỗ trợ đặc tả định dạng nhật ký tùy chỉnh khi thực hiện ./mình, do đó, quá dài không nên là vấn đề nữa. Tiết lộ: Người duy trì snoopy ở đây.
Bostjan Skufca

7

Âm thanh với tôi như bạn đang tìm kiếm một cái gì đó như rootsh ( trang nam ). Để trích dẫn trang người đàn ông:

Rootsh là một trình bao bọc cho các shell ghi lại tất cả các tổ hợp phím được lặp lại và đầu ra đầu cuối vào một tệp và / hoặc vào syslog.

Mặc dù tên, điều này có thể được sử dụng cho bất kỳ người dùng.


2

Có lẽ tốt hơn hết là bạn nên sử dụng sudo (hoặc tương tự) để chạy các lệnh bạn quan tâm và tin tưởng người dùng ở một mức độ nào đó. Khi bạn càng gần với những thứ "kiểm soát hoàn toàn", thì càng khó theo dõi những gì họ đang làm. Gần đây tôi đã xem xét các công cụ như thế này. Hầu hết họ chỉ tạo ra các bản ghi khó quản lý nếu bạn có đủ người dùng và máy móc để tạo ra một thứ đáng giá như vậy. :)

Hãy xem xét tất cả các thông tin bạn sẽ tạo ra. Bao nhiêu trong số đó bạn quan tâm? Có lẽ là rất ít - vì vậy bạn đang tạo ra các bản ghi hầu như không có giá trị. Kiểm tra những điều bạn thực sự quan tâm, như những người khác đang đề xuất, có thể đưa bạn đến trạng thái kết thúc tốt hơn.


1

Bash có thể được biên dịch với sự hỗ trợ syslog kể từ 4.1.

Nó không phải là hoàn hảo (kế toán quy trình có thể tốt hơn cho điều đó), nhưng chủ yếu là tương tác người dùng; âm lượng sẽ dễ quản lý hơn và bạn sẽ có thể chuyển sang một cái gì đó chi tiết hơn nếu nghi ngờ điều gì đó bất thường.

Điều đó nói rằng, đây là cách xâm nhập và là một người dùng, tôi sẽ mong đợi một cảnh báo bảo mật rất cụ thể trước khi bạn bắt đầu làm điều đó.


0

Ngoài ra còn có sudosh ( http://sudosh.sourceforge.net ) sẽ ghi nhật ký phiên. Bạn có tùy chọn chạy nó dưới dạng shell được xác định cho người dùng hoặc thông qua sudo. Nó cũng theo dõi thời gian cho từng phiên để bạn có thể phát lại phiên và xem nó (bao gồm các phiên chỉnh sửa và không có gì).

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.