2014-09-01 12 views
5

Có một nhiệm vụ để phát hiện các lần đăng nhập thành công và không thành công từ một ứng dụng Linux C++. Cách tốt nhất để làm điều đó là gì?Phát hiện các nỗ lực xác thực từ ssh/console từ một ứng dụng cho linux

Tôi đã chỉ tìm thấy 2 cách: 1) Kiểm tra/var/log/an toàn bởi thời gian chờ 2) Sử dụng inotify on/var/log/an toàn

Nhưng có một vấn đề, đó là hai hoặc nhiều đăng nhập không thành công trong/var/logs/an toàn trông giống như "PAM 2 lỗi xác thực nhiều hơn" và chuỗi này không xuất hiện trong giây lát đăng nhập không thành công.

+0

Bạn có thể có may mắn hơn khi yêu cầu trên http://serverfault.com. Thực tế là bạn đang viết một chương trình không phải là rất quan trọng ở đây; câu hỏi thực sự là nơi thông tin mà bạn cần đến. – Kenster

+1

Bạn có thể phân tích cú pháp/var/log/wtmp và/var/log/btmp. Một cái gì đó như "cuối cùng" và "lastb" lệnh nào. Xem: http://stackoverflow.com/questions/11093218/parsing-wtmp-logs-with-c – Icarus3

Trả lời

1

Trên hệ thống phong nha, /var/log/wtmp/var/log/btmp là vị trí tốt nhất để kiểm tra. Glibc cung cấp các chức năng để làm cho khả năng tiếp cận dễ dàng hơn: getutxent, getutxid, getutxline, vv ...

Ngoài ra kiểm tra hành vi của utmpdump -f /var/log/wtmp, nó rất gần gũi về những gì bạn muốn (decode wtmp và làm theo sự kiện mới).

0

Không có mục nào ở trên. Nó thực sự đơn giản hơn nhiều:

1) Mở tập tin

2) gọi read()trong non-blocking mode hơn và hơn để đọc dữ liệu.

3) Nếu bạn nhận được -EWOULDBLOCK, sau đó thực hiện select(). Nếu dữ liệu đã sẵn sàng để đọc, hãy quay lại bước 2.

4) Nếu chọn thời gian chờ (giả sử thời gian chờ 1 giây), hãy kiểm tra xem tệp đã được xoay hay chưa. (Cách đơn giản: Kiểm tra ctime trên tệp mới. Nhưng có thể có cách tốt hơn. Hãy xem tail -F nguồn ..) Nếu tệp mới đã được tạo, hãy gọi close() và chuyển đến 1. Nếu không, hãy đến 3.

Ngoài ra, hãy xem fail2ban.

Các vấn đề liên quan