lunes, 8 de marzo de 2010

Configurar seguridad del sistema

Existe un  mandato para configurar automáticamente la seguridad básica del sistema. Ejecutándolo nos cambiará varios valores de sistema:
QALWOBJRST=*NONE
QAUTOCFG=0        
QAUTOVRT=0         
QDEVRCYACN=*DSCMSG
QDSCJOBITV=120    
QDSPSGNINF=1      
QINACTITV=60      
QINACTMSGQ=*ENDJOB
QLMTDEVSSN=1       
QLMTSECOFR=1       
QMAXSGNACN=3       
QMAXSIGN=3         
QRMTSIGN=*FRCSIGNON
QRMTSRVATR=0       
QSECURITY=50       
QVFYOBJRST=3       
QPWDEXPITV=60       
QPWDMINLEN=6 si es <6, u 8 si es <8
QPWDLMTCHR=Contenido del msgid CPXB302
QPWDLMTAJC=1     
QPWDLMTREP=2     
QPWDRQDDGT=1     
QPWDRQDDIF=1      
QPWDVLDPGM=*NONE


También desactivara la contraseña, con PASSWORD(*NONE), de los siguientes usuarios: QSYSOPR, QPGMR, QUSER, QSRV y QSRVBAS.
De esta forma evitamos que nadie se conecte al sistema utilizando estos perfiles.

Finalmente, si existe el diario de auditoria (QAUDJRN), ejecutará el mandato CHGSECAUD (Cambia auditoría de seguridad) que cambiara los siguientes valores de sistema: QAUDCTL=*AUDLVL y QAUDLVL=*DFTSET, que incluye la auditoria de todos los conceptos siguientes:
*ATNEVT, *CREATE, *AUTFAIL, *DELETE, *JOBDTA, *NETBAS, *NETCLU, *NETCMN, *NETFAIL,
*NETSCK, *OBJMGT, *OFCSRV, *OPTICAL, *PGMADP, *PGMFAIL,*PRTDTA, *SAVRST, *SECCFG, *SECDIRSRV, *SECIPC, *SECNAS, *SECRUN, *SECSCKD, *SECURITY, *SECVFY, *SECVLDL, *SERVICE, *SPLFDTA, *SYSMGT.

Para más información sobre estos valores buscad en el IBM iSeries Information Center 

Al ejecutar el mandato CFGSYSSEC aparecerá una pantalla que nos pedirá confirmación:
Es recomendable ejecutar este mandato con el sistema restringido y conectado con usuario *SECOFR.
Podemos modificar los valores por omisión de este programa, que nos interesen para nuestro sistema, recuperando, editando y creando nuestra propia versión.
Para recuperar el fuente del programa utilizar el mandato:
RTVCLSRC PGM(QSECCFGS) SRCFILE(MYSRCLIB/MYSRCFILE) SRCMBR(MYQSECCFGS)

lunes, 1 de marzo de 2010

Utilizar los menus de ayuda

Es interesante recordar los sistemas de ayuda para buscar un mandato y que nos pueden ser muy útiles, existen varias opciones:

Situar el cursor en la línea de mandatos del AS400, al pulsar F4 aparece el menú "Major Command Groups", también podemos acceder con GO MENU(MAJOR).
En el menú MAJOR podemos intentar buscar una opción que, por la descripción, pueda contener el mandato que estamos buscando.  Muchas veces nos aparecerán submenus. Las 3 primeras opciones, del menú MAJOR, son más interesantes ya que son búsquedas genéricas, el resto son temáticas. 

Un ejemplo si queremos visualizar el contenido de la cola de salida QGPL/QPRINT, seleccionaríamos la opción "11. Spooling Commands", a continuación "4. Output Queue Commands"  y finalmente "8. Work with Output Queue" que ejecuta el mandato que buscábamos WRKOUTQ, solo hace falta indicarle en el parámetro OUTQ la cola QPRINT y pulsar Intro. Evidentemente es más rápido acordarse del mandato WRKOUTQ OUTQ(QGPL/QPRINT), pero si no lo conocemos, pero si la manera de buscarlo, seguramente lo encontraremos.

Con la opción "1. Select Command by Name" podemos seleccionar por los caracteres con los que suponemos empieza el mandato. Por ejemplo si usamos DSP* (Display) nos mostrará la lista de mandatos utilizados para visualizar algo. Podemos utilizar directamente el mandato SLTCMD, o incluso mejor tecleando los caracteres iniciales del mandato y añadiendo el carácter * al final, desde la linea de mandatos, y pulsando Intro: Probad WRKJOB*.

La opción "2. Verb Commands" (VERB) nos lista un menú con los mandatos agrupados por verbo. Por ejemplo si queremos ver todos los mandatos para verificar el estado de algo (CMDVFY) utilizaremos la opción "85. Verify Commands".

Otra opción es "3. Subject Commands" (SUBJECT), con esta se nos muestra una lista de mandatos agrupados por la función que realizan. Un ejemplo seria ver todos los mandatos que se utilizan para gestionar un dispositivo, para ello seleccionaríamos la opción "89. Device Commands".

Darse cuenta que todos estos menús en la parte superior izquierda muestran el nombre del menú por lo que podemos acceder a ellos directamente con el mandato GO y el nombre de menú.

Todos los submenus tienen nombre para poder acceder a ellos directamente, siguen la filosofía de denominación del AS400, con lo que se nos facilita su búsqueda por "intuición". Por ejemplo queremos ver todos los mandatos (CMD) que se pueden utilizar para la definición (D) de un subsistema (SBS), pues nada tecleamos GO MENU(CMDSBSD), pulsamos Intro y "voilà":
 Nota: Los números de opción que se muestran es para la versión V5R4M0, pero pueden variar para otras versiones.

lunes, 15 de febrero de 2010

Diccionario breve para entender mandatos AS400

Los mandatos del AS400 heredaron la nomenclatura de creación de comandos del S/38 de IBM, y la costumbre muy anglosajona de contraer las palabras usadas. Básicamente la idea, con excepciones, es utilizar las consonantes del verbo de la acción a realizar y de las palabras a utilizar mientras fueran legibles.
Por ejemplo unos de los mandatos mas utilizados del AS400 es "Trabajar con trabajos activos" y que es: WRKACTJOB (Work active jobs), realmente es simple y fácil de recordar.

A continuación os paso un breve diccionario para entender la nomenclatura de los mandatos del AS400 (no pretende ser una lista exhaustiva):

AUD  - Audit (Auditar)
AUT  - Authorization (Autorización)
AUTL - List of authorization (Lista de autorizaciones)
CFG  - Configuration (Configuración)
CHG  - Change (Cambiar)
CPY  - Copy (Copiar)
CRT  - Create (Crear)
CTL  - Controller (Controlador)
DEV  - Device (Dispositivo)
DFN  - Definition (Definición)
DIR  - Directory (Directorio)
DLT  - Delete (Eliminar)
DOC  - Document (Documento)
DSK  - Disk (Disco)
DSP  - Display (Visualizar)
DTA  - Data (Datos)
DUP  - Duplicate (Duplicar)
EDT  - Edit (Editar)
FIL  - File (Archivo)
GRP  - Group (Grupo)
GRT  - Grant (Autorizar)
HDW  - Hardware
INF  - Information (Información)
JOB - Job (Trabajo)
JRN  - Journal (Diario)
LCK  - Locks (Bloqueos)
LIB  - Library (Biblioteca)
LIN  - Line (Linea)
LNK  - Links (Enlaces)
OBJ  - Object (Objeto)
OUT  - Output (Salida)
OWN  - Owner (Propietario)
PGM  - Program (Programa)
PGP  - Primary group (Grupo primario)
PNL  - Panel (Panel de visualización)
PRF  - Profile (Perfil de usuario)
PRT  - Printer (Impresora)
QRY  - Query (Consulta)
RMT  - Remote (Remoto)
RMV  - Remove (Remover)
RSC  - Resource (Recurso)
RST  - Restore (Restaurar)
RVK  - Revoke (Revocar)
SAV  - Save (Salvar)
SRC  - Source (Origen, Fuente)
STR  - Start (Arrancar)
STS  - Status (Estado)
SYS  - System (Sistema)
TBL  - Table (Tabla)
TGT  - Target (Destino)
USR  - User (Usuario)
VAL  - Value (Valor)
WRK  - Work with (Trabajar con)
...

Algunos de especiales:
***E - Entry (Entrada de una lista)
D    - Description (Descripción)
Q    - Queue (Cola)
...

lunes, 8 de febrero de 2010

Desactivar usuarios sin uso

Es recomendable desactivar los usuarios inactivos, o sea con más de x días sin conectarse al sistema.

Para ello podemos utilizamos una herramienta del sistema, es recomendable conectarse como QSECOFR para realizar esta acciones:
  • Ir al menú GO SECTOOLS.
  • Seleccionar la opción "4. Analyze profile activity" (mandato ANZPRFACT) e introducir los días inactivos, por ejemplo 30 días.
  • Al pulsar Intro añade, o modifica si ya la teníamos, la entrada QSECIDL1 de los trabajos planificados del sistema.
  • Podemos ver o editar esta entrada con el mandato:
  • WRKJOBSCDE JOB(QSECIDL1)
  • Si, por ejemplo, queremos que se ejecute mensualmente (por omisión es semanal):
  • CHGJOBSCDE JOB(QSECIDL1) FRQ(*MONTHLY) SCDDATE(*MONTHEND) SCDDAY(*NONE) JOBQ(*LIBL/QSYSNOMAX) TEXT('Desactiva usuarios sin uso durante más de 30 días')
Si tenemos usuarios que no nos interesa que se desactiven nunca hemos de introducirlo en la lista de usuarios a omitir por este proceso, para ello:
  • Ir al menú GO SECTOOLS.
  • Seleccionar la opción "3. Change active profile list".
  • O utilizar el mandato CHGACTPRFL y pulsar F4.
  • Después introducimos el perfil de usuario que queremos omitir, por ejemplo QSECOFR:
  • CHGACTPRFL USRPRF(QSECOFR) ACTION(*ADD).
  • Para eliminar un usuario de la lista:
  • CHGACTPRFL USRPRF(ANYUSER) ACTION(*REMOVE)
  • Podemos visualizar, o imprimir, la lista de usuarios omitidos para desactivación automática con la opción "2.Display active profile list" (mandato DSPACTPRFL)

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