2014-09-01 6 views
5

Esiste un'attività che rileva i tentativi di accesso riusciti e non riusciti da un'applicazione C++ Linux. Qual è il modo migliore per farlo?Rileva i tentativi di autenticazione da ssh/console da un'applicazione per linux

ho trovato solo 2 modi: 1) Vedi/var/log/secure per timeout 2) Utilizzare inotify su/var/log/secure

Ma c'è un problema, che due o più tentativi di accesso non riusciti in/var/logs/secure sembrano "PAM 2 ulteriori fallimenti di autenticazione" e questa stringa non viene visualizzata in un momento di accesso non riuscito.

+0

Potresti avere più fortuna a chiedere su http://serverfault.com. Il fatto che tu stia scrivendo un programma non è molto importante qui; la vera domanda è da dove verranno le informazioni di cui hai bisogno. – Kenster

+1

È possibile analizzare i file/var/log/wtmp e/var/log/btmp. Qualcosa come i comandi "last" e "lastb". Vedi: http://stackoverflow.com/questions/11093218/parsing-wtmp-logs-with-c – Icarus3

risposta

1

Su un sistema decente, /var/log/wtmp e /var/log/btmp sono le migliori posizioni da controllare. Glibc fornire funzioni per rendere l'accesso più facile: getutxent, getutxid, getutxline, ecc ...

verificare anche il comportamento di utmpdump -f /var/log/wtmp, è molto vicino a ciò che si vuole (wtmp decodifica e seguire nuovi eventi).

0

Nessuna delle precedenti. In realtà è molto più semplice:

1) aprire il file

2) chiamare read()in modalità non-blocking più e più volte per leggere i dati.

3) Se si ottiene , quindi fare un select(). Se i dati sono pronti per la lettura, tornare al passaggio 2.

4) Se la selezione scade (diciamo 1 secondo di timeout), controllare se il file è stato ruotato. (Modo semplice: controlla il ctime sul nuovo file, ma probabilmente c'è un modo migliore: dai un'occhiata alle fonti tail -F ..) Se è stato creato un nuovo file, chiama close() e vai a 1. Altrimenti, vai a 3.

Inoltre, dai un'occhiata a fail2ban.