lunes, 18 de enero de 2010

Auditar uso o supresión de un objeto

A veces nos puede interesar auditar el uso o eliminación de un objeto por varias razones:
  • Investigar quien, cuando y que lo usa/elimina un objeto.
  • Investigar si podemos eliminar un objeto sin uso.
  • Análisis el funcionamiento de una aplicación nuestra, o de terceros.
  • Etc...
USO DE UN OBJETO
Para ello debemos cambiar el valor de auditoria del objeto, que por omision tendrá el valor indicado en los atributos de la biblioteca, utilizar mandato DSPLIBD LIB(MYLIB) y fijarse en parámetro "Create object auditing" si tiene el valor *SYSVAL habremos de ver el valor de sistema QCRTOBJAUD (utilizar DSPSYSVAL SYSVAL(QCRTOBJAUD) para verlo) que habitualmente tiene el valor *CHANGE, o sea solo audita cambios en el objeto, no su utilización.

Para auditar el uso de un objeto, por ejemplo del programa MYLIB/MYPGM, debemos cambiar el valor de auditoria del objeto, antes documentaremos el valor actual de auditoria para el objeto a cambiar:

DSPOBJD OBJ(MYLIB/MYPGM) OBJTYPE(*PGM) DETAIL(*FULL)
Pulsar AvPág y ver parámetro "Object auditing value", usualmente *CHANGE.

Después ya podemos activar la auditoria de lecturas para el objeto, para ello ejecutar:

CHGOBJAUD OBJ(MYLIB/MYPGM) OBJTYPE(*PGM) OBJAUD(*ALL)

A partir de este instante cualquier acceso al programa MYLIB/MYPGM quedara registrado en el diario de auditoria del sistema (QAUDJRN).

Cuando queramos analizar el uso de ese programa deberemos acceder a los datos del diario de auditoria, para ello lo más recomendable es someter el comando DSPJRN para realizar un volcado de los datos del diario a un archivo temporal y posteriormente realizar un query sobre ese fichero:

Someter:
DSPJRN JRN(QAUDJRN) RCVRNG(*CURCHAIN) FROMTIME(dia/hora_inicio) TOTIME(dia/hora_fin) ENTTYP(ZR) OUTPUT(*OUTFILE) OUTFILFMT(*TYPE1) OUTFILE(MYLIBTEMP/DSPJRNUSE)

Después con SQL, por ejemplo, podemos buscar las utilizaciones del objeto:
SELECT * FROM TEMP/DSPJRN WHERE JOESD LIKE '%MYPGM%'

Dentro de los campos, que se nos mostraran, tendremos algunos claves para nuestra investigación:
Campo    Descripción
JOCODE   Código de auditoría
JOENTT   Tipo entrada de auditoria
JODATE   Fecha de la entrada

JOTIME   Hora de la entrada
JOJOB    Nombre del trabajo
JOUSER  
Nombre del usuario
JONBR    Numero del trabajo
JOPGM    Nombre del programa que ha realizado el cambio
JOOBJ    Nombre del objeto cambiado
JOLIB
    Biblioteca del objeto cambiado
JOMBR
    Nombre del miembro (si es un archivo)
JOESD      Datos de la entrada (longitud variable

Una vez analizado el uso del objeto, es recomendable dejar el valor de auditoria al valor anterior, para evitar demasiada sobrecarga en el sistema al tener que guardar en el diario cada vez que se utiliza un objeto, así como el crecimiento desmesurado de los receptores asociados del diario

También es recomendable no dejarlo activado el valor para muchos objetos al mismo tiempo, por las mismas razones.

SUPRESIÓN DE UN OBJETO
Si lo que buscamos es quien y cuando se ha eliminado un objeto, debemos volcar a fichero unos códigos de diario de auditoria diferentes:

DSPJRN JRN(QAUDJRN) RCVRNG(*CURCHAIN) FROMTIME(dia/hora inicio) TOTIME(dia/hora fin) JRNCDE((T)) ENTTYP(DO) OUTPUT(*OUTFILE) OUTFILFMT(*TYPE1) OUTFILE(MYLIBTEMP/DSPJRNDLT)

Después utilizaremos la misma consulta SQL que en el caso anterior.

Nota1: Si queremos la fecha en formato TIMESTAMP utilizar OUTFILFMT(*TYPE3)
Nota3: Podemos ver el significado de los codigos de auditoria en el IBM i Information Center.
Nota2: Tener en cuanta el periodo de latencia en el sistema de los receptores de los diarios de auditoria, ya que es habitual su borrado periódico para evitar ocupar demasiado espacio en disco

jueves, 7 de enero de 2010

Averiguar IP donde se desactiva un usuario

A veces vemos el mensaje CPF1393 en el log del sistema:
Esto nos indica que el sistema ha desactivado un perfil de usuario, habitualmente por contraseña errónea.
Si vemos que se repite mucho este mensaje, para el mismo usuario, podemos intentar averiguar desde que dirección IP se está intentando conectar. Para ello hemos de ejecutar el mandato DSPJRN y visualizar las entradas del diario de auditoria del sistema, procurando ajustar al máximo el día y hora ya que acostumbran haber cientos de entradas en el mismo segundo:

DSPJRN JRN(QAUDJRN) RCVRNG(*CURCHAIN) FROMTIME(250509 165607) JRNCDE((T)) ENTTYP(PW)

Al pulsar Intro obtendremos una lista parecida a esta:

Pulsar la opción "5=Display entire entry" para ver el contenido de la entrada:

Ahí veremos que perfil de usuario esta fallando el login; si pulsamos "F10=Display only entry details" podremos ver el nombre de trabajo, la hora, y si pulsamos AvPag. podremos ver la dirección IP: 

Lo único que habra que tener en cuenta es que, si usamos DHCP en los clientes, puede que esa dirección sea reutilizada por otros usuarios.


Nota: Las desactivaciones de los usuarios del servicio NetServer aparecen con el codigo de diario 'VP', pero en la entrada no se ve la dirección ip. La podemos ver directamente con DSPLOG MSGID(CPIB682), acotando las fechas, o utilizando *BEGIN en la fecha inicial.