lunes, 20 de diciembre de 2010

Feliz Navidad y Prospero año nuevo

Feliç Any Nou, Feliz Año Nuevo, Happy New Year, Neues frohes Jahr, Bonne Année, Felice anno nuevo, Ano feliz novo, Mutlu yeni yıl, Nowy Szczęśliwy Rok, prosperu añu nuevu, Erós An Nau, srecno novo leto, shoma mobarak bashad, Feliz AniNovo, Boldog Új Évet Kívánok, Farsaelt Komandi ar, Appi Niu Yaa, Annum Nuevo, Xin Nian Kuai Le, bona annada, Te-Pito-O-Te-Henua, Anul Nou Fericit, prosperu annu nou, Vesela Nova Gomina, Manigong Bagong Taon, Hepi Nu Yia…

lunes, 8 de noviembre de 2010

Estadisticas espacio en disco

Muchos de nosotros conocemos la utilidad del sistema para recoger las estadísticas de uso de disco. Para los que no las conozcan se accede a ellas con el mandato GO MENU(DISKTASKS)
Con ellas podemos planificar la recogida de datos de ocupación de disco (mandato RTVDSKINF), ya que el proceso suele tardar horas, y la impresión de los informes de los datos recogidos (mandato PRTDSKINF), con varios niveles de detalle.

Lo más habitual es planificar la recogida de datos de ocupación en disco semanalmente (o mensualmente) durante el fin de semana (por ejemplo), con la opción 1. Collect disk space information, e imprimir el informe al lunes siguiente.

Cuando planificamos la recogida el sistema nos añade una entrada en el planificador de trabajos denominada QEZDKWKMTH, lo podemos ver con el mandato WRKJOBSCDE JOB(QEZDK*).
El trabajo QEZDKWKMTH graba los datos en el archivo QUSRSYS/QAEZDISK, no confundir con el mismo archivo en la biblioteca QSYS ya que esta vacío. Cada vez que se lanza el trabajo QEZDKWKMTH limpia, antes de empezar, el archivo QAEZDISK, de la QUSRSYS, para insertar los nuevos datos en la siguiente ejecución.

lunes, 25 de octubre de 2010

Cambio hora verano/invierno

Como cada año el próximo fin de semana se realiza el cambio de hora al horario de invierno (-01:00 GMT)

Para que nuestros sistemas AS400 no se despisten y realicen el cambio de hora automáticamente revisar el articulo publicado el año pasado:

viernes, 22 de octubre de 2010

Averiguar quien elimino un archivo de spool

Algunas veces todos hemos tenido la necesidad de averiguar que usuario ha eliminado un archivo de spool de un trabajo. Esto lo podremos hacer si tenemos activada la auditoria del sistema (valor QAUDCTL) que debe contener *AUDLVL. También debe estar especificado *SPLFDTA, en  el  valor de sistema QAUDLVL (ver Nota2).

Una vez comprobado, y activado, lo anterior, ya podemos recuperar las entradas del diario de auditoria que se correspondan con las operaciones en el spool.
Para ello lo mas recomendable es someter el mandato DSPJRN  (suele tardar bastante) indicando día/hora  de inicio y día/hora fin, del rango de tiempo donde queremos investigar la desaparición del spool, e indicando que solo queremos volcar las entradas de diario T-SF:
SBMJOB CMD(DSPJRN JRN(QAUDJRN) RCVRNG(*CURCHAIN) FROMTIME(ddmmyy hhmmss) TOTIME(ddmmyy hhmmss) JRNCDE((T)) ENTTYP(SF) OUTPUT(*OUTFILE) OUTFILFMT(*TYPE5) OUTFILE(MyTmpLib/TmpDspJrn) ENTDTALEN(*CALC)) JOB(DSPJRN)

El trabajo DSPJRN nos generará un archivo con las entradas relacionadas, en el ejemplo MyTmpLib/TmpDspJrn. Ahora podremos ejecutar una consulta, por ejemplo con SQL, indicando el nombre del archivo de spool y el nombre del trabajo de donde ha desaparecido el spool, en el ejemplo "QSYSPRT" y "MyJob":
SELECT * FROM MyTmpLib/TmpDspJrn WHERE JOESD LIKE 'D%' AND JOESD LIKE '%QSYSPRT%' AND JOESD LIKE '%MyJob%'

Y "voila", en la columna JOB NAME y USER NAME, ya tenemos el usuario que ha eliminado el archivo de spool, así como la hora y desde que programa, si es QCMD indica que se eliminó desde la linea de mandatos, o con alguna opción de menú. Cuando eliminamos un spool, el campo JOESD empieza con el carácter D.
Nota1: El OUTFILFMT(*TYPE5) es válido para la versión V5R2 o superiores. Para versiones anteriores podemos utilizar el *TYPE4, pero entonces no podemos especificar el nombre de trabajo (MyJob), con lo cual pueden aparecer más entradas que correspondan a eliminaciones de archivo de spool, pero en varios trabajos. Si no tenemos muchos puede que no sea un problema, pero si aparecen muchos, sera difícil discernir cual es el que buscamos, aunque hay otros valores que nos pueden ayudar, como puede ser la cola de salida que también aparece en el campo JOESD.

Nota2: Para activar la seguridad del sistema leer la entrada Configurar seguridad del sistema. Para saber más sobre la auditoria del sistema, Help400 publicó , hace ya unos años, una utilidad que puede ir bien para entender mejor como funciona.

miércoles, 6 de octubre de 2010

Tabla de trabajos

El mandato DSPSYSSTS nos  muestra una pantalla con el estado del sistema.
Uno de los valores que hemos de tener en cuenta ,en sistemas con muchos trabajos, es "Jobs in system" que nos indica cuantos JobID tiene el sistema, esto incluye cualquier trabajo que este en cola de trabajos, en estado activo o en cola de salida.

Existe un valor de sistema que nos indica cual es el numero máximo de trabajos en el sistema : DSPSYSVAL SYSVAL(QMAXJOB)

El sistema usa unas tablas para controlar los trabajos que están en el sistema, cada una de ellas puede contener 16352 entradas, con los JobId de los trabajos, que están en el sistema.

Con el mandato DSPJOBTBL podemos visualizar el estado de dichas tablas.

Es importante tener activada la limpieza del sistema (ver entrada Limpiar automaticamente mensajes, joblogs, dumps, ...) para evitar llegar a llenar las tablas de trabajos y tengamos una parada anormal del sistema.

viernes, 17 de septiembre de 2010

Recuperar trabajos de un usuario

La utilidad RTVUSRJOB nos sirve para recuperar los trabajos de los usuarios, pudiendo seleccionar por nombre de usuario, nombre de trabajo (incluido genéricos), estado del trabajo y tipo de trabajo (Batch, Interactivo o todos).
La salida del mandato puede ser a archivo de spool o directamente a fichero, no se contempla la salida a pantalla porque ya existe el mandato WRKUSRJOB que realiza dicha función.
Pulsando F1 podemos acceder a la ayuda del mandato.

pd: También esta disponible en el Grupo Recursos AS400 de IBM MydW para su descarga.

jueves, 2 de septiembre de 2010

Limpiar automaticamente mensajes, joblogs, dumps, ...

Una de las tareas básicas de cualquier administrador de un sistema es mantener los logs del sistema. Nuestro AS400 incluye una funcionalidad para realizar estas tareas, de una forma sencilla y automática.

Para ello solo hemos de ejecutar el mandato GO MENU(CLEANUP) que nos mostrará un menú con las siguientes opciones:
 Primero definiremos que acciones y periodos queremos limpiar, para ello seleccionamos la opción 1, que nos mostrará la siguiente pantalla:
En esta pantalla definimos los periodos de retención de los mensajes, diarios y logs del sistema, así como la hora de ejecución diaria de la limpieza. Pulsar Intro para guardar los cambios y otra vez para salir. 
Nota1: La limpieza de joblogs la realiza solo de los listados ubicados en  las colas de salida QUSRSYS/QEZJOBLOG y QUSRSYS/QEZDEBUG.
Nota2: Para que los listados de los joblogs, dumps y vuelcos de servicio vayan a parar a las colas QEZ* correspondientes, ejecutar los siguientes mandatos:
  CHGPRTF    FILE(*ALL/QPJOBLOG) OUTQ(*LIBL/QEZJOBLOG)
  CHGPRTF    FILE(*ALL/QPPGMDMP) OUTQ(*LIBL/QEZDEBUG)
  CHGPRTF    FILE(*ALL/QPSRVDMP) OUTQ(*LIBL/QEZDEBUG)
A continuación solo nos queda activar la limpieza automática seleccionando la opción 2.

Nota3:  Para que se ejecute la limpieza diaria debe estar activo el Planificador de trabajos del sistema. Trabajo QSYSSCD en subsistema QCTL o QBASE, este trabajo somete el trabajo QCLNUSRMSG, así como los trabajos planificados.

También podemos lanzar la limpieza automática inmediatamente con la opción 3, o cancelar su ejecución con la opción 4.

miércoles, 4 de agosto de 2010

Goodbye, AS/400, Old Friend

Interesante Articulo con una retrospectiva de la historia del AS400 y sus orígenes, publicado en ITJungle en Abril de 2008 por Brian Kelly:

http://www.itjungle.com/tfh/tfh040708-story05.html

El siguiente enlace al documento "20 years of the AS/400", podemos ver el timeline de la historia de este sistema.

Aprovechad el verano para su lectura.

sábado, 24 de julio de 2010

Auditar la seguridad en AS400

La gente de PowerTech tiene colgada una guía donde nos explica los conceptos de seguridad del As400 y algunos ejemplos para comprobar nuestro estado. Recomiendo su lectura ya que puede sernos muy interesante a la vez que aprendemos mas sobre nuestro sistema:


Además realizando este tipo de análisis muchas veces descubrimos problemas ocultos en nuestras aplicaciones.

miércoles, 14 de julio de 2010

Trabajos QZDASOINIT

Los trabajos QZDASOINIT dan servicio a las conexiones ODBC de los usuarios y/o aplicaciones remotas realizan desde cliente (PC,o Servidor). Estos trabajos se ejecutan con el usuario QUSER.
QZDASOINIT es un trabajo de prearranque del subsistema QUSRWRK; para ver estas entradas usar el mandato DSPSBSD SBSD(QUSRWRK) y seleccionar la opción 10 "Prestart job entries". En esas entradas podemos ver, con la opción 5, la configuración de este servicio y sobre todo el numero inicial de trabajos y  numero máximo de trabajos permitidos.
Para arrancar el servicio (es necesario que este levantado el subsistema QSERVER):
STRHOSTSVR SERVER(*DATABASE)                                                     
    The database server daemon is started in the QSERVER subsystem
    The daemon job is named QZDASRVSD.  The associated server jobs
    are named QZDASOINIT, QZDASSINIT, and QTFPJTCP.


Para detener el servicio:
ENDHOSTSVR SERVER(*DATABASE)                                        
    The active connections being serviced by the        
    QZDASOINIT and QZDASSINIT server jobs will be ended.
    The server jobs servicing these connections will be 
    ended.
Si ejecutamos el mandato WRKACTJOB JOB(QZDASOINIT) vemos, rápidamente, que usuarios están conectados en ese momento al servicio, ya que desde la V5R4 del OS400 se modifico este mandato para mostrar el Current User en la columna User, si no hay nadie conectado en ese momento se muestra QUSER.

lunes, 21 de junio de 2010

Impacto del ENDJOBABN

El comando ENDJOBABN tiene la finalidad de terminar trabajos que aparentemente no responden a una finalizacion con el mandato ENDJOB.
Es muy recomendable no utilizar normalmente este mandato, ya que tiene implicaciones ocultas.
Una vez ejecutado se activa una marca en el sistema por el cual el siguiente IPL sera considerado "anormal" y el sistema al arrancar realizara una serie de tareas de comprobación del sistema adicionales que alargaran el tiempo de IPL.
Ademas si hay alguna ptf pendiente de aplicar en IPL no se aplicará, ya que el sistema considera que no debe instalarlas en una IPL con terminación anormal.

Existe un valor de sistema para ver cual si el ultimo IPL fue anormal, para ello ejecutar el comando: DSPSYSVAL SYSVAL(QABNORMSW)
Esto nos mostrara uno de los siguientes valores:
0=Normal 
1=Abnormal

miércoles, 9 de junio de 2010

Recuperar subsistema de un trabajo

La utilidad RTVJOBSBS nos devuelve el nombre del subsistema donde se esta ejecuta un trabajo.
Esto nos puede ser de utilidad para, por ejemplo, no ejecutar un ENDSBS SBS(QINTER) si nuestro trabajo se esta ejecutándose en ese subsistema.

miércoles, 2 de junio de 2010

The IBM AS400 A technical introduction

He encontrado este documento, creado por Tom Van Looy en 2009, y puede servirnos para introducirnos en el fantástico mundo del AS400.  Esta colgado en el apartado Archivos del nuevo espacio de Recursos/400 en IBM MydW

lunes, 17 de mayo de 2010

Modificada utilidad CHGSTSJRN

Se ha modificado la utilidad CHGSTSJRN, para permitir desactivar el registro por diario de todos los archivos de una biblioteca, aunque esa biblioteca no tenga ningún diario.

Esta utilidad, que se publico en el año 2004, permite Parar, Arrancar o Parar y Arrancar el registro por diario de todos los archivos físicos de una biblioteca. También tiene la opción de crear el diario y sus receptor automáticamente.

Pulsando F1 podemos acceder a la ayuda del mandato.

lunes, 10 de mayo de 2010

Desactivar usuarios con contraseña por omision

Para evitar accesos indeseados a nuestros sistemas es una norma básica no utilizar la contraseña por omisión al crear el usuario y que habitualmente es igual al nombre del perfil, ya que cualquier usuario con unos conocimientos muy básicos del sistema podría acceder a nuestro sistema.

Para saber cual es nuestra situación actual podemos analizar las contraseñas actuales con una herramienta del sistema:
  • Ir al menú GO SECTOOLS.
  • Seleccionar la opción "1. Analyze default passwords" (mandato ANZDFTPWD), en este mandato podemos seleccionar varias opciones:
  1. *NONE: Solo imprime el listado de usuarios con contraseña igual al perfil
  2. *DISABLE: Desactiva el usuario
  3. *PWDEXP: Caduca la contraseña del usuario para forzar su cambio en el próximo inicio de sesión.
  • Para evaluar nuestro estado es recomendable utilizar el valor *NONE.
  • Podemos someterlo ya que puede tardar algunos minutos:
  • SBMJOB CMD(ANZDFTPWD ACTION(*NONE)) JOB(ANZDFTPWD)
  • Después analizaremos el resultado del listado y actuaremos en consecuencia.
  • Si nosotros no controlamos la creación de los usuarios, podemos planificar la ejecución de este mandato pero con la opción de *DISABLE o *PWDEXP:
  • ADDJOBSCDE JOB(ANZDFTPWD) CMD(ANZDFTPWD ACTION(*DISABLE)) FRQ(*MONTHLY) SCDDATE(*MONTHEND) SCDDAY(*NONE) JOBQ(*LIBL/QSYSNOMAX) TEXT('Desactiva usuarios con contraseña por omisión')
  • En este caso hemos optado por desactivar automáticamente y mensualmente los usuarios con la contraseña igual al perfil, pero podríamos haber optado por caducarla y forzar su cambio.
  • Es aconsejable hacer estas acciones con el perfil de usuario QSECOFR.
Otra acción recomendable es cambiar el mandato para crear perfiles de usuario (CRTUSRPRF) para que, por omisión, la contraseña sea igual a *NONE, con lo que después de crear un usuario no tendría contraseña y no podría conectarse al sistema:
  • CHGCMDDFT CMD(QSYS/CRTUSRPRF) NEWDFT('PASSWORD(*NONE)')
 Después manualmente le asignaríamos una contraseña que cumpla las políticas y ademas forzaríamos su caducidad en el primer inicio de sesión, para que el usuario la cambie a la que le parezca mejor:
  • CHGUSRPRF USRPRF(New_User) PASSWORD(krl2_lt5vz) PWDEXP(*YES)

    jueves, 29 de abril de 2010

    Corregido bug utilidad CPYJOBSPL

    Se ha corregido un pequeño bug de la utilidad CPYJOBSPL, que eliminaba el archivo de spool cuando el primer archivo a copiar se denominaba QSYSPRT. 

    Ir al articulo Copiar archivos spool.

    viernes, 23 de abril de 2010

    IBM i 7.1 y Power7

    IBM ha anunciado la nueva versión V7R1M0 del OS400, o como la llama ahora IBM i 7.1, así como sus nuevos procesadores POWER7

    Podéis ver los anuncios de la 7.1 en IBM Power of i y del nuevo procesador POWER7

    Tenemos mucho más detalle en los siguientes enlaces:
    Los documentos de los anuncios los ha publicado Common España.

      jueves, 22 de abril de 2010

      Recuperar estado de un trabajo

      La utilidad RTVJOBSTS nos facilita el recuperar el estado de un trabajo.
      Para ello hemos de indicarle el JOBID del trabajo (job_number/user/job_name) en el parámetro JOB y nos devolverá el estado en el parámetro JOBSTS (char 10). La ayuda nos indica que posibles estados nos puede devolver:
      La única consideración es que el trabajo debe existir en el sistema, si la ejecución del mismo ha terminado, y no tiene ningún archivo de spool  asociado, el mandato RTVJOBSTS nos devolverá *ERROR.

      Este mandato solo se puede utilizar desde programas compilados.

      Podéis bajar el código desde este enlace RTVJOBSTS

      viernes, 9 de abril de 2010

      Recuperar número trabajos activos subsistema

      La utilidad RTVACTJOB recupera el número de trabajos activos, del subsistema  que pasemos en el parámetro SBSNAM, y lo devuelve en el parámetro ACTJOB al programa desde donde se llame.
      Este mandato solo se puede utilizar desde programas compilados.

      Podéis bajar el código desde este enlace RTVACTJOB.

      lunes, 29 de marzo de 2010

      Uso del mandato WRKACTJOB

      Uno de los mandatos más utilizados en el AS400 es el WRKACTJOB (Trabajar con Trabajos Activos), ¿Pero le sacamos todo el partido a este mandato?
      En primer lugar comentar que este mandato es un consumidor de recursos, por tanto no es recomendable que estén varias personas ejecutándolo al mismo tiempo. La primera vez que usamos el mandato puede que nos salga una pantalla parecida a esta:
      Esta nos muestra las opciones y las teclas de Función que podemos usar. Una vez tengamos soltura con esas opciones y funciones, podemos pulsar F21=Nondisplay instructions/keys para ocultarlas, de esta forma podemos ver más trabajos en la misma pantalla:

      La primera vez que ejecutamos este mandato en nuestra sesión, se activan unas estadísticas que se actualizaran cada vez que pulsemos F5=Refresh, con lo que acumulara y hará las medias aritméticas de los valores de algunas columnas marcadas bajo la denominación Elapsed, como la del porcentaje de uso de CPU de los trabajos. En la parte superior tenemos el campo Elapsed time que nos indica el tiempo desde el ultimo reset de las estadísticas. También vemos CPU % que indica el total de uso de CPU del sistema para el total de procesadores que tengamos. El total de trabajos en el sistema se nos indica en el campo Active jobs.
      Si pulsamos F10=Restart statistics, resetearemos las estadísticas a 0, esto nos puede servir para comprobar el consumo puntual de CPU (snapshot) de un trabajo.

      También podemos utilizar F19=Start automatic refresh para dejar la pantalla en modo de refresco automático, que como si pulsáramos F5 cada n segundos, el valor por omisión esta indicado en el parámetro INTERVAL del mandato, por omisión es *PRV o sea el ultimo utilizado, aunque la primera vez son 300 segundos. Esto nos puede ser útil para controlar algún trabajo en concreto desde una pantalla.

      Con F17=Top podemos ir al principio de pantalla y con F18=Bottom al final, esto nos sirve para movernos algo más rápido, sobre todo si tenemos muchos trabajos.

      Con F11 podemos cambiar las vistas para ver más información sobre el trabajo, hay 3 vistas diferentes que aparecen cada vez que pulsamos la tecla de función.

      El mandato WRKACTJOB permite filtrar por:
      • Nombre de subsistema (SBS) para por ejemplo ver solo los trabajos interactivos en el subsistema QINTER y/o QCTL:
        • WRKACTJOB SBS(QCTL QINTER)
      • Nombre de trabajo (JOB) para ver solo los trabajos que:
        • Empiecen por un nombrte:
          • WRKACTJOB JOB(MyJob*)
        • Trabajos del sistema:
          • WRKACTJOB JOB(*SYS)
        • O trabajos de subsistema activos:
          • WRKACTJOB JOB(*SBS)
      • Podemos filtrar por:
        • Uso de CPU (CPUPCTLMT), por ejemplo los trabajos que consumas mas de un 15% de CPU: WRKACTJOB CPUPCTLMT(15)
        • Tiempo de respuesta interactivo (RSPLMT) de una sesión (pantalla verde), por ejemplo una pantalla que tarde más de 5 minutos en ejecutar un programa/mandato: WRKACTJOB RSPLMT(300)
      Otra opción muy interesante es el parámetro Sequence (SEQ) que nos permite ordenar por alguna de las columnas del mandato, un clásico es ordenar por consumo de CPU para averiguar que trabajo se nos esta llevando el procesador: WRKACTJOB SEQ(*CPU) o por Total de unidades de CPU consumidas (en segundos) WRKACTJOB SEQ(*CPUPCT). Para más información pulsar F1=Help sobre campo del parámetro y podremos ver una explicación más detallada de todas las opciones posibles.

      Una opción que utilizo bastante es ordenar por una columna, combinándola con otras opciones explicadas, por ejemplo la de Status de los trabajos, para ello situamos el cursor encima del titulo de la columna y pulso F16=Resequence de esta forma puedo encontrar, más rápidamente, todos los trabajos que están en estado MSGW.
      Nota: Tener en cuenta que si queremos ordenar por subsistema debemos situar el cursor encima de la columna Subsystem/Job, pero si queremos ordenar por nombre de trabajo deberemos situar el cursor encima del primer carácter del nombre de trabajo que aparezca en la pantalla.

      Otra opción, poco conocida, es que el mandato WRKACTJOB oculta los trabajos de prearranque inactivos (PJ) o grupos de sesión inactivos (INT), es cuando pulsamos la tecla PetSys + opción 1 (Mayusc+Esc) o la tecla de Atención de Sistema (Esc). Para visualizarlos hemos de pulsar F14=Include, un ejemplo para el subsistema QSERVER:
      WRKACTJOB SBS(QSERVER)
      En esta pantalla solo vemos 5 trabajos, pero si pulsamos F14 nos aparecen más de 14 trabajos:

      Finalmente podemos usar la tecla de función F15=Work with system status que ejecuta el mandato WRKSYSSTS que necesitaría un libro para explicar su utilidad, podéis consultar la siguiente entrada para tener alguna idea sobre el tema: Como saber si el AS400 necesita mas RAM

      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

      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.