DB2AUDIT

Narzędzie DB2AUDIT służy do zbierania i monitorowania zdarzeń na instancji i bazie danych DB2.
Konfiguracja narzędzia DB2AUDIT jest zapisana w pliku binarnym db2audit.cfg i znajduje się w folderze SECURITY w katalogu głównym instancji DB2.
Przykładowo na naszym testowym serwerze to folder

/db2/db2home/iamdb02/db2inst1/sqllib/security

Logi ze zdarzeniami instancji są zapisywane w formacie [db2audit.instance.log.member_number[.timestamp]] do plików binarnych w folderze /security/auditdata w katalogu głównym instancji DB2.
W naszym przykładzie to folder

/db2/db2home/iamdb02/db2inst1/sqllib/security/auditdata

Bazodanowy plik logu jest zapisywany w formacie [db2audit.db.dbname.log.member_number[.timestamp]]
Aby sprawdzić np gdzie są umiejscowione pliki archiwalne należy wydać polecenie:

db2> SELECT PATH FROM TABLE(SYSPROC.AUDIT_ARCHIVE('', -2))

PATH                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
----------------------------------------------------------------------------------
/db2/db2home/db2inst1/sqllib/security/auditdata/audit_arch/

ten sam skutek daje uruchomienie procedury AUDIT_ARCHIVE

db2> CALL SYSPROC.AUDIT_ARCHIVE(NULL, NULL)

Przykładowe pliki:

-rw------- 1 db2inst1 db2iadm1  8430 Aug 19 18:09 db2audit.db.ITIMDB.log.0
-rw------- 1 db2inst1 db2iadm1 10742 Aug 19 18:13 db2audit.instance.log.0
-rw------- 1 db2inst1 db2iadm1  8384 Aug 19 17:03 db2audit.instance.log.0.20170819170313
-rw------- 1 db2inst1 db2iadm1  8580 Aug 19 17:36 db2audit.instance.log.0.20170819173654
-rw------- 1 db2inst1 db2iadm1 14292 Aug 19 18:11 db2audit.instance.log.0.20170819181134

Aby zmodyfikować miejsce położenia plików należy je podać w ustawieniach konfiguracji db2audit.

KONFIGURACJA DB2AUDIT

Aby wyświetlić konfigurację DB2AUDIT należy użyć polecenia:

[db2inst1@vdb2bck][~/sqllib/security] $ db2audit describe

DB2 AUDIT SETTINGS:

Audit active: "FALSE "
Log audit events: "FAILURE"
Log checking events: "FAILURE"
Log object maintenance events: "FAILURE"
Log security maintenance events: "FAILURE"
Log system administrator events: "FAILURE"
Log validate events: "FAILURE"
Log context events: "NONE"
Return SQLCA on audit error: "FALSE "
Audit Data Path: ""
Audit Archive Path: ""

AUD0000I  Operation succeeded.

Pierwszy parametr AUDIT ACTIVE pokazuje nam czy audyt jest uruchomiony (jeśli tak to parametr ma wartość TRUE). Kolejne parametry ustawiają rejestrację poszczególnych zakresów monitoringu zdarzeń. Wartość FAILURE rejestruje tylko błędne zdarzenia, SUCCESS - tylko zakończone sukcesem, BOTH - wszystkie zdarzenie, NONE - brak rejestracji.

Poszczególne grupy zdarzeń (SCOPE):
* ALL scope - zawiera wszytskie zakresy (AUDIT, CHECKING, OBJMAINT, SECMAINT, SYSADMIN, VALIDATE, CONTEX)
* AUDIT scope - zawiara zmiany w konfiguracji i administracji audytu
* CHECKING scope - zawiera zdarzenia powiązane z autoryzacją na bazie (?)
* OBJMAINT (object maintenance) scope - zawiera tworzenia i usuwanie obiektów i baz db2
* SECMAINT (security maintenance) scope - zawiera zmiany w uprawnieniach bazy dnaych (GRANT, REVOKE...)
* SYSADMIN (sysadmin events) scope - zawiera zmiany z autoryzacją SYSADM
* VALIDATE (validate events) scope - zawiera procesy walidacji użytkowników
* CONTEXT (context events) scope - zawiera skłądnie SQL i wykoane operacje na bazie (contexty)

Zawartość poszczególnych kategorii zdarzeń opisuje artykuł:
https://www.ibm.com/support/knowledgecenter/SSEPGG_9.8.0/com.ibm.db2.luw.admin.sec.doc/doc/r0053355.html

Aby globalnie na wszystkich parametrach zmienić na wartość BOTH wpisujemy:

$ db2audit CONFIGURE scope all STATUS both ERRORTYPE audit

AUD0000I  Operation succeeded.

Poszczególne zakresy zmieniamy poleceniem używając odpowieniej nazwy scope'a (none, checking, context, objmaint, secmaint, sysadmin, validate)

$ db2audit CONFIGURE scope sysadmin STATUS both ERRORTYPE audit

AUD0000I  Operation succeeded.

Parametr ERRORTYPE ma dwie wartości NORMAL i AUDIT

Dwa ostatnie parametry określają miejsce położenia plików danych oraz archiwum logów (zarchiwizowane dane audytowe).

Zmiana konfiguracji folderów z logami:

db2audit configure archivepath /db2/db2home/db2inst1/sqllib/security/auditdata/audit_arch
db2audit configure datapath /db2/db2home/db2inst1/sqllib/security/auditdata

Aby przywrócić domyślne wpisy (tzn bieżącą ścieżkę):

db2audit configure archivepath ""
db2audit configure datapath ""

Sprawdzamy czy parametry się zmieniły

[db2inst1@vdb2bck][~/sqllib/security/auditdata] $ db2audit describe

DB2 AUDIT SETTINGS:

Audit active: "FALSE "
Log audit events: "FAILURE"
Log checking events: "FAILURE"
Log object maintenance events: "FAILURE"
Log security maintenance events: "FAILURE"
Log system administrator events: "FAILURE"
Log validate events: "FAILURE"
Log context events: "NONE"
Return SQLCA on audit error: "FALSE "
Audit Data Path: "/db2/db2home/db2inst1/sqllib/security/auditdata"
Audit Archive Path: "/db2/db2home/db2inst1/sqllib/security/auditdata/audit_arch"

AUD0000I  Operation succeeded.

URUCHOMIENIE DB2AUDIT

uruchamiamy bazę danych i się do niej podłączamy
$> db2start
$> db2 list db directory
$> db2 connect to BAZA
$ db2audit start

AUD0000I  Operation succeeded.

W folderze /db2/db2home/db2inst1/sqllib/security/auditdata tworzy się plik logu o nazwie db2audit.instance.log.0
Jak widać jest to log dotyczący całej instancji bazy danych DB2.

Teraz podłączamy się do bazy i wykonujemy logowania, wylogowywania poprawne i nie , zakładanie i usuwanie użytkowników, zakładanie obiektów i ich usuwanie.

EKSPORT ZDARZEŃ Z LOGU DO PLIKU TEKSTOWEGO

Gdy już zakończyliśmy rejestrację zdarzeń wykonujemy polecenie zapisujące wszystkie trwające zdarzenia do logu:

$ db2audit flush

AUD0000I  Operation succeeded.

Następnie polecenie przenoszące dane do pliku archiwalnego

$ db2audit archive

Node     AUD      Archived or Interim Log File
         Message
-------- -------- ---------------------------------------------------
       0 AUD0000I db2audit.instance.log.0.20170819181134

Jeśli db2audit jest zatrzymany to polecenie archiwizacji spowoduje usunięcie pustego pliku logu. Jeśli jednak db2audit nadal działa i rejestruje zdarzenia, polecenie to spowoduje PRZENIESIENIE danych do logu archiwalnego i nie powoduje usunięcia logu audytu.

Po wydaniu polecenia wyświetliła się nam nazwa pliku do jakiego został zarchiwizowany log ze zdarzeniami.
Pora wyeksportować archiwalny plik binarny do czytelnego pliku tekstowego

$ db2audit extract file extract.out from files db2audit.instance.log.*.*

AUD0000I  Operation succeeded.

Jeśli chcemy wyeksportować tylko pojedynczy log wpisujemy:

$ db2audit extract file extract_all.out from files db2audit.instance.log.0.20170915121716

AUD0000I  Operation succeeded.

Spowoduje on wyeksportowanie loga do pliku extract.out znajdującego się w bieżącym folderze. Jeśli chcemy umieścić plik w konkretnym folderze musimy podać całą ścieżkę.

$ db2audit extract file /db2/db2home/db2inst1/sqllib/security/extract.out from files db2audit.instance.log.*.*

AUD0000I  Operation succeeded.

na koniec wyłączamy DB2AUDIT-a
$ db2audit stop

AUD0000I  Operation succeeded.

sprawdzamy zawartość logu extract.out
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

timestamp=2017-08-19-18.59.04.681635;
  category=AUDIT;
  audit event=EXTRACT;
  event correlator=0;
  event status=-1307;
  userid=db2inst1;
  authid=DB2INST1;
  origin node=0;
  coordinator node=0;
  application id=*LOCAL_APPLICATION;
  application name=db2audit;

timestamp=2017-08-19-18.59.04.702540;
  category=SYSADMIN;
  audit event=DB2AUDIT;
  event correlator=0;
  event status=-1307;
  userid=db2inst1;
  authid=DB2INST1;
  origin node=0;
  coordinator node=0;
  application id=*LOCAL_APPLICATION;
  application name=db2audit;

timestamp=2017-09-15-12.06.46.493174;   --- tutaj root probował się zalogować
  category=CHECKING;
  audit event=CHECKING_FUNCTION;
  event correlator=3;
  event status=-1092;
  database=SAMPLE;
  userid=root;
  authid=ROOT;
  origin node=0;
  coordinator node=0;
  application id=*LOCAL.db2inst1.170915100545;
  application name=db2bp;
  object type=INSTANCE;
  access approval reason=DENIED;
  access attempted=MEMBER_OF_SYS_GROUP;

timestamp=2017-09-15-12.16.36.854048;    --- tutaj root próbuje stworzyć nową bazę
  category=SYSADMIN;
  audit event=CREATE_DATABASE;
  event correlator=0;
  event status=-1092;
  userid=root;
  authid=ROOT;
  origin node=0;
  coordinator node=0;
  application id=*LOCAL_APPLICATION;
  application name=db2bp;

EXPORT LOGU DO PLIKÓW Z PODZIAŁEM NA ZDARZENIA

Aby wyeksportować zdarzenia z podziałem na poszczególne typy korzystamy z polecenia

$> db2audit extract delasc from files db2audit.instance.log.0.20170915125138

Wydanie polecenia:
$> db2audit extract delasc
wyeksportuje wszystkie archiwalne auditlogi do poszczególnych plików. Każdy z logów zostanie dopisany do odpowiedniego logu "szczegółowego" nie usuwając znajdujących się już tam wpisów.

Zostanie utworzone kilka plików DEL w których są zapisane poszczególne zdarzenia zależnie od ich kategorii. Są to zwykłe pliki tekstowe z danymi oddzielonymi przecinkami:

    audit.del
    checking.del
    objmaint.del
    secmaint.del
    sysadmin.del
    validate.del
    context.del
    execute.del
    auditlobs

Przykładowa zawartość dwóch plików:

sysadmin.del

"2017-09-15-12.49.31.178709","SYSADMIN","START_DB2",0,-1092,"","db2inst1","DB2INST1",0,0,"*LOCAL_APPLICATION","db2start",,,,,,,,,,,,,
"2017-09-15-12.49.40.301899","SYSADMIN","START_DB2",0,-1063,"","db2inst1","DB2INST1",,,"*LOCAL_APPLICATION","db2star2",,,,,,,,,,,,,
"2017-09-15-12.49.40.352182","SYSADMIN","START_DB2",0,-1063,"","db2inst1","DB2INST1",0,0,"*LOCAL_APPLICATION","db2start",,,,,,,,,,,,,

checking.del
------------------

"2017-09-15-12.49.31.142866","CHECKING","CHECKING_FUNCTION",0,-1092,"","root","ROOT",,,"*LOCAL_APPLICATION","db2chkau",,,,,,"INSTANCE","0x00000000000000000000000000000001","0x00000000000000000000000000800000",,,,,,,,,,,
"2017-09-15-12.50.50.027416","CHECKING","CHECKING_FUNCTION",3,-1092,"SAMPLE","root","ROOT",0,0,"*LOCAL.db2inst1.170915105042","db2bp",,,,,,"INSTANCE","0x00000000000000000000000000000001","0x00000000000000000000000000800000",,,,,,,,,,,

AUTOARCHIWIZACJA LOGU AUDYTOWEGO

Aby uruchomić systematyczną archiwizację logu audytowego najprostszym sposobem będzie regularne uruchamianie procedury AUDIT_ARCHIVE

CALL SYSPROC.AUDIT_ARCHIVE(NULL, NULL)

  Result set 1
  --------------

  DBPARTITIONNUM PATH                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             FILE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             SQLCODE     SQLSTATE SQLERRMC    
  -------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- -------- -----------------------------------------------------------------------------------------------------------------------------------------------
               0 /db2/db2home/iamdb02/db2inst1/sqllib/security/auditdata/audit_arch/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              db2audit.db.ITIMDB.log.0.20170915165512                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    0 -        -           

  1 record(s) selected.

lub

db2audit archive

Należy pamiętać aby otrzymany log przerobić na plik tekstowy

db2audit extract file extract_20170915165512.out from files db2audit.db.ITIMDB.log.0.20170915165512

Ten wpis został opublikowany w kategorii DB2 i oznaczony tagami . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz