Archivos de January, 2008

Aplicación de PTFs en HOST

El presente documento explica como realizar un mantenimiento aplicando parches a un programa concreto. En este documento, trataremos de poner un ejemplo real de aplicación de parches al TSM.

Obtención de la PTF

Si vemos que un programa necesita una PTF concreta nos la descargaremos de la web de IBM, desde el Service Agent. (en nuestro caso, el TSM tiene la PTF UK29650, que soluciona los APARs (Authorized Program Analisys Report) siguientes: PK45022 PK45846 PK46450 PK47066 PK47105 PK47249 PK48211 PK48634 PK48873 PK49063 PK49871 PK49873 PK50061 PK50343 PK50365 PK50373 PK50709).

Una vez descargada, tendremos el fichero en formato Terse, que viene a ser una especie de tar pero para host. Por tanto, con el Personal Communications nos subiremos ese fichero (ocupa unos 12 MB) a un dataset secuencial que tiene un formato FB de longitud de registro 1024 y un blocksize de 10240, (estos datos nos los dan cuando te descargas la PTF) que se llama YGGDRASL.PTF.TEMP0000

UNTERSE de la PTF en el HOST

Con ese PTF recibido en el dataset secuencial YGGDRASL.PTF.TEMP0000, lanzaremos un job como el siguiente que nos hará el Unterse y nos dejará el resultado en YGGDRASL.PTF.BULK0000:

//UNTERSE JOB CLASS=A,MSGCLASS=X
//S1 EXEC PGM=AMATERSE,PARM=UNPACK
//SYSPRINT DD SYSOUT=*
//SYSUT1   DD DISP=SHR,DSN=YGGDRASL.PTF.TEMP0000
//SYSUT2   DD DSN=YGGDRASL.PTF.BULK0000,DISP=(OLD,KEEP,KEEP)

RECEIVE de la PTF en el HOST

Una vez hecho el UNTERSE, tenemos en YGGDRASL.PTF.BULK0000 la PTF “descomprimida”, así que lo siguiente que haremos será ejecutar otro JCL que la reciba, según el producto (en nuestro caso, el Tivoli Storage Manager, Versión 5.3):

//RECTSM52 JOB CLASS=A,MSGCLASS=X,REGION=8192K
//SMPEDPS  EXEC PGM=GIMSMP,
//                      PARM='PROCESS=WAIT',DYNAMNBR=120
//SMPCSI   DD   DSN=TSM53.GLOBAL.CSI,DISP=SHR
//SMPCNTL  DD *
  SET BOUNDARY(GLOBAL).
  RECEIVE .
/*
//SMPHOLD  DD DUMMY
//SMPPTFIN DD DISP=SHR,
//            DSN=YGGDRASL.PTF.BULK0000
 

Este JCL lo que hace es utilizando la zona SMP del TSM, llamada TSM53.GLOBAL.CSI, recibir el contenido del dataset secuencial YGGDRASL.PTF.BULK0000, con lo que mirará si esa PTF esta aplicada ya. Eso el SMP lo hace consultando los datasets de TARGET y DLIBs y si lo encuentra, entonces no lo instala.

Si no los encuentra, como es el caso, esa PTF la deja “recibida” dentro de un dataset llamado TSM53.SMPPTS, que controla la GLOBAL de este SMP, lista para ser aplicada.

APPLY-CHECK de la PTF

Antes de aplicar definitivamente la PTF, lanzaremos el job que aplica la PTF de manera virtual, para ver si hay algún prerrequisito que no se cumpla, o que exista algún problema de ficheros, con el fin de no liarla cuando la queramos instalar. El job es el siguiente:

//APPTSM53 JOB CLASS=A,MSGCLASS=X,REGION=0M
//SMPEDPS  EXEC PGM=GIMSMP,
//                      PARM='PROCESS=WAIT',DYNAMNBR=120
//SMPCSI   DD   DSN=TSM53.GLOBAL.CSI,DISP=SHR
//SMPCNTL  DD *
  SET BOUNDARY(TSMTZN).
  APPLY
         BYPASS   (
                   HOLDSYSTEM
                            (
                              EC
                              DOC
                              DEP
                              ACTION
                              DELETE
                              UCLIN
                            )
                  )
         SELECT (
                 UK29650
                )
         CHECK
         GROUPEXTEND
         JCLINREPORT
         RETRY(YES)

APPLY de la PTF

Si vemos la salida del job y comprobamos que no existe ninguna dependencia no resuelta y que el resultado del job es un Cond. Code de 0 o de 4 (si da 4, dará alguna advertencia, asi que habrá que mirar si seguimos adelante o no), estamos en condiciones de submitir el mismo job, pero quitando el CHECK. Eso hará permanentes los cambios y actualizará la zona TARGET.

ACCEPT-CHECK de la PTF

Antes de aceptar definitivamente la PTF, lanzaremos el job que, al igual que con el APPLY, acepta la PTF de manera virtual, para ver si hay algún prerrequisito que no se cumpla, o que exista algún problema de ficheros, aunque no debería. El job es el siguiente:

//ACCTSM53 JOB CLASS=A,MSGCLASS=X,REGION=0M
//SMPEDPS  EXEC PGM=GIMSMP,
//                      PARM='PROCESS=WAIT',DYNAMNBR=120
//SMPCSI    DD   DSN=TSM53.GLOBAL.CSI,DISP=SHR
//SMPCNTL   DD *
  SET BOUNDARY(TSMTZN)
  ACCEPT
         BYPASS   (
                   HOLDSYSTEM
                            (
                              EC
                              DOC
                              DEP
                              ACTION
                              DELETE
                              UCLIN
                            )
                  )
         SELECT (
                 UK29650
                )
         CHECK
         GROUPEXTEND
         JCLINREPORT
         RETRY(YES)

ACCEPT de la PTF

Si vemos la salida del job y comprobamos que no existe ninguna dependencia no resuelta y al igual que antes, el resultado del job es un Cond. Code de 0 o de 4, estamos en condiciones de submitir el mismo job, pero quitando el CHECK. Eso hará permanentes los cambios y actualizará la DLIB correspondiente.

Instalación de unidad 3590 REAL en Hercules

Este documento pretende explicar como instalar una unidad de cinta IBM 3590 Magstar en un PC con Hercules. De esta forma, se podrían leer cintas reales escritas por mainframes en el hercules, con todos los beneficios que ello supone.

Configuración Hardware
Una unidad IBM 3590, tanto de un robot 3494 como standalone, es básicamente como cualquier unidad de cinta que puedes encontrar en el mercado. Tiene dos interfaces SCSI y por tanto, se pueden conectar a cualquier tarjeta SCSI que puedes encontrar en el mercado, ya sea una tarjeta para PC, para unidad de control de un robot (A50, A60, etc) o lo que sea. En este documento, voy a abordar la instalación y configuración de una unidad 3590-B1A que fue retirada de un robot 3494 en funcionamiento, porque fue sustituida por unas unidades 3592-H1A, con mayor densidad y rapidez que sus antecesoras. Estas unidades estaban conectadas dentro de una unidad de control A60 dentro de un frame del robot 3494.

Unidad 3950-B1A
Por tanto, tenemos una unidad que pesa como unos 20 Kg que en la parte delantera dispone de un panel de control y la boca para insertar los cartuchos y que en su parte trasera tenemos 3 conectores, dos SCSI de 78 pines llamados PORT 0 y PORT 1 y el conector de corriente (monofásico de 220V) y un interruptor que enciende o apaga la unidad.

Fig. 1: Trasera de la Unidad

PC con Hercules y tarjeta SCSI PCI

El PC es una máquina con Linux y tiene instalado Hercules y z/OS. Dicho sistema funciona con normalidad, y hasta el momento, toda cinta que se montaba era de fichero emulado AWS o HET.

Para conectar la unidad de cinta 3590 al PC, hemos instalado una tarjeta PCI Adaptec 2944-UW que, OJO a esto, es una tarjeta DIFFERENTIAL – HVD. Lo comento porque las tarjetas que normalmente se venden en tiendas de informática suelen ser todas SINGLE-ENDED o LVD (de bajo voltaje 5 Voltios ). Estas tarjetas Single Ended en apariencia son EXACTAMENTE IGUALES, aunque su número de serie (en el caso del ejemplo de Adaptec) es AHA-2940UW, y no AHA-2944UW que es la diferencial. Por tanto, la unidad 3590 funciona con interfaz DIFFERENTIAL, que es un bus SCSI de alto voltaje (12 Voltios).

Fig 2: Tarjeta SCSI Diferencial Adaptec 2944UW

Si enchufáramos la unidad de cintas 3590 que es HVD a una tarjeta LVD, lo mas seguro que es el humo que tienen en su interior los circuitos integrados que hace que los susodichos funcionen correctamente, se escape al exterior y por lo tanto dejen de funcionar. Por tanto, si vemos que en la salida del conector pone SCSI-SE, esa tarjeta NO es la apropiada. La tarjeta correcta sería SCSI-DIFF.

He elegido esa tarjeta Adaptec porque es la mas común de todas y se puede encontrar en cualquier web de componentes de segunda mano como eBay y cuestan dos duros.

Cableado

En este tipo de instalaciones SCSI, sobre todo en las de índole DIFFERENTIAL, se deben instalar terminadores activos. Me explico: En una cadena SCSI normal, la cual desde la tarjeta SCSI a los dispositivos conectados a ella se conectan en un modo daisy-chain o la salida de un dispositivo se conecta a la entrada del otro, la salida de este otro a la entrada del siguiente y así­ sucesivamente, al final de la cadena se suele instalar un terminador que indica el final del bus. La mayoría de los casos en los que la cadena se encuentra en el interior del equipos (por ejemplo, discos RAID) el terminador suele ser pasivo y lo emula la tarjeta. Pero en este caso, es necesario instalar un terminador DIFFERENTIAL en el.

Fig 3 y 4: Terminador Diferencial y cable con zapatas SCSI

El tipo de cable también es especial: La unidad 3590 tiene una particularidad que no tienen otros equipos SCSI: No dispone de un puerto de entrada y otro de salida, solo dispone de un puerto, por lo que el cable debe proveer de un conexionado daisy-chain, que por un extremo es de conexión normal, pero que el otro extremo tiene una zapata con dos conectores que hacen las veces de SCSI IN y OUT en el mismo cable. Como cuando me dieron la unidad, me regalaron también los cables, pues a este respecto no he tenido problemas para encontrar este tipo de cables, porque son bastante complicados de encontrar a menos que los compremos a un broker y por tanto, tengamos que desembolsar bastante dinero.

Fig. 5: Conexión del cable con el terminador activo en la 3590

Por lo tanto, para conectar el cable, conectaremos el extremo normal del cable SCSI a la tarjeta SCSI del PC (con el PC apagado) y por el otro, conectaremos la zapata macho al conector hembra  de la unidad 3590 y en el conector hembra de la zapata, colocaremos el terminador activo.

Fig. 6: El otro extremo del cable SCSI conectado a la tarjeta del PC

Con esto, tenemos la parte hardware conectada.

Configuración Firmware 3590

Ahora lo que hay que hacer es configurar la unidad 3590 para que pueda hablar con el PC sin problemas. Por un lado, hay que configurar el número de puerto SCSI que queremos que el sistema configure y por otro lado, hay que configurar el tipo de operación de la unidad (Si esta dentro del robot, no funciona de la misma manera que si es standalone, etc).

Lo primero que haremos será configurar el puerto SCSI. Esta unidad tiene 2 puertos SCSI y dos conectores. Esto hace que la unidad pueda ser compartida por dos sistemas distintos, y a cada puerto se le puede configurar un numero SCSI distinto.

Para ello, encenderemos la unidad y esperaremos a que pase los tests. Una vez pasados, en el panel de control elegiremos con las flechas de cursor el menu Service, y de ahi elegiremos Set Offline. En el menú Offline, elegiremos que queremos poner Offline ambos puertos, asi que pulsaremos sobre Both.

Una vez puestos Offline, si volvemos al menú Service, podemos elegir la opción Set Address y elegimos el puerto al que queremos dar la dirección. Generalmente le daremos la dirección 0, a no ser que el mismo bus tenga algún otro dispositivo con esa misma dirección y por tanto, debamos dar otra. Lo que no se puede hacer es darle la dirección 7, ya que esa suele ser la dirección que reserva la propia tarjeta SCSI del PC.

Una vez cambiada la dirección, la salvaremos, y resetearemos la unidad, para que tenga la nueva dirección configurada. Si los puertos siguen Off-Line, y dado que solo vamos a utilizar uno de ellos, desde el Menú Service podemos poner Online el puerto SCSI al que va conectado el cable del PC.

Por otro lado, hay que configurar el modo de operación de la unidad. La unidad 3590 en función de que si está en un robot o en modo standalone, tiene muchos modos de operación y modos de compatibilidad con otras unidades de cinta. En nuestro caso, y dado que la unidad la sacamos de un robot y ahora la queremos poner standalone, debemos cambiar la modalidad de la unidad. Para ello, seguiremos los siguientes pasos:

1.- Sacaremos el panel de control del sitio donde esta alojado. Eso hará que se muestren 2 botones que estaban ocultos cuando el panel se encuentra en la posición original: Uno de ellos tiene un símbolo de una llave inglesa. Es el modo de Servicio de IBM (CE) y que hará que al pulsarlo se muestre un menú con muchas opciones que ni sabíamoss que existían. Pues lo pulsaremos.

2.- Seleccionaremos Config/Install. Y de ahí­, iremos a Drv Options. En el, debemos estar seguros que esta desactivada la opción Disable CU Mode. Si esta la opción “punteada” es que esta desactivada.

3.- Dentro de ese mismo menú, seleccionaremos la opción Drv Features y cambiaremos lo que estaba por la opción B1A/E1A Deskside.

4.- Seleccionaremos a Yes para salvar todos los datos, y una vez hecho, resetearemos la unidad o bien apagándola y encendiéndola, o bien pulsando el botón que esta a la izquierda del de la llave inglesa que es el de reset.

Configuración PC

Ahora, toca arrancar el PC. Con la unidad encendida y con los diagnósticos pasados, encenderemos el PC. En el arranque del firmware de la tarjeta SCSI, deberíamos ver como ahora en la dirección 0 existe un dispositivo llamado IBM3590B1A. Si se ve, la instalación ha sido un éxito.

Fig. 7: Unidad 3590 correctamente detectada por la tarjeta SCSI

En principio, ahora si arrancamos GNU/Linux, debería autodetectar la unidad y darle un nombre de dispositivo, como por ejemplo, /dev/st0.

Para probar que la unidad funciona, haremos una prueba sencilla: Realizaremos un tar de unos ficheros a la unidad de cinta y luego los recuperaremos. Para ello, lo primero que haremos será introducir una cinta 3590 en la unidad y esperar a que la cargue. Cuando en el panel de control aparezca un READY AT LOAD POINT, la unidad está dispuesta. Entonces, ejecutaremos un comando tal que tar -cvf /dev/st0 /home/prueba.txt siendo prueba.txt un fichero de texto normalito que esta en la /home, y debería grabarlo como un rayo.

Para verificar que restaura, si hacemos un tar -xvf /dev/st0 debería dejarnos en /home el fichero prueba.txt grabado anteriormente. Si esto lo ha hecho bien, la unidad, su configuración y GNU/Linux funcionan perfectamente.

Configuración Hercules

Para añadir esa unidad de cinta al Hercules, basta con editar el fichero de configuración hercules.cnf que reside por defecto en /etc/hercules.cnf y añadir la siguiente línea:

0500   3490     /dev/st0

Esto hace que la unidad de cinta esté conectada a la dirección 0500 y si nuestro z/OS tiene esa dirección en el IODF configurada como unidad 3490 o 3590, será suficiente.

NOTA: Como hercules no reconoce unidades 3590, hemos definido la unidad como 3490. Esto realmente no afecta al grabado de cintas, por lo que si desde z/OS del hercules, mandamos una copia a cinta, a pesar de que la unidad se vea como una 3490, se grabara en formato 3590 con la capacidad de cartuchos 3590 J y K y podrá ser leída desde cualquier mainframe real.

Mantenimiento de Software en Mainframe: Windows Update vs. SMP/E

El articulo de hoy trata de explicar como funciona el sistema de mantenimiento de Software en MVS o z/OS, o dicho de otro modo, como mantener el software e instalar parches que arreglan cagadas de software.

A pesar de que el Sistema Operativo MVS tenga mas de 40 años y su desarrollo, robustez e implantación es de sobra probado, cada día salen arreglos de software o fixes que solventan alguna carencia, error u optimización de programas del sistema. Y los que no salen, siempre se recurre a “It is NOT a bug: It’s a Feature”, je, je. Y si, MVS es lo que es y como todo, requiere la instalación de parches y mas parches, porque siempre hay un humano por detrás que mete la gamba programándolo. Afortunadamente, son gambas controladas porque de lo contrario, seria de risa, pero una de las razones por las que MVS es tan robusto es por el magnifico soporte y seguimiento software que tiene (lógico, cuesta la hostia de dinero tener una licencia de MVS, como para dejar que pete, no te fastidia).

El 90% de las veces, salen PTFs (a partir de ahora diré PTF, con “arreglo” no me siento identificado, je, je) de módulos de software que nunca en la vida has utilizado pero que ahí están y no deben ser ignorados. La política de algunas instalaciones es no instalar PTFs que no incumben en programas producto que no se utilicen, en un afán muy conservador que sigue la máxima de “¿Funciona? Pues no lo toques”. En otras instalaciones, la política es instalar todo lo que sale. En cualquier caso cada política tiene sus pros y sus contras, ya que algunas PTFs, sobre todo las que tocan cosas del SYSPLEX o del SYS1.NUCLEUS requieren hacer IPL, y esto en un ambiente de rabioso 24×7 con miles de usuarios conectados concurrentemente es una putada gorda.

Este sistema, al contrario que en Windows, que se instalan automáticamente, en la mayoría de instalaciones es el deber del programador de sistemas el controlar que PTFs hay, en que afecta al sistema y que módulos parchea. Esto es muy importante, así que, al contrario que en Windows, que se instalan y se reinicia el equipo automáticamente y muy chupiguay todo, en mainframe no se puede permitir que una PTF haga un reinicio automático teniendo a 40.000 personas tirando de un CICS, así que hay que LEER mucho, cuando tienes la PTF te viene siempre con un documento de ayuda y despliegue, y te dice todo lo que hace, en que afecta al sistema, si hay dependencias (es decir, que para instalar esa PTF hayas tenido antes que instalar otras PTFs), y como aplicarla.

Para ello, se utiliza un Producto que viene con el Sistema Operativo, llamado SMP/E (System Modification Program/Extensions). Mediante este producto, podemos tener controlado perfectamente todo el software instalado en el Mainframe, que versión de productos tiene y toda la Gestión de PTFs.

Como funciona el SMP/E

SMP/E trabaja con ZONAS SMP: Existe la zona GLOBAL, la DLIB y la TARGET. Digamos que se estructuran jerárquicamente.

La zona GLOBAL es la zona raíz, y en ella se contiene información, mucha información, acerca de los productos instalados, cuando se instalaron, como se instalaron, aplicación de parches, versiones de productos, situación en disco, librerías, etc, viene a ser un índice de todo lo que tenemos, como si fuera el Registro de Windows, pero solo la rama de Software, y en GNU/Linux el gestor de paquetes dpkg, por ejemplo (ni se acerca, pero esto lo digo mas o menos para que lo entendáis).

La zona DLIB es una zona donde se tiene un Í­ndice de todos los módulos que suministra IBM con los productos: Pueden ser fuentes, programas objeto, módulos de procedimientos, etc. Siguiendo con la analogía, una zona DLIB podría ser la /usr/src en GNU/Linux.

La zona TARGET en cambio, es la zona donde se controla todos los programas ejecutables y productos finales. Siguiendo con la analogía, seria la /lib y la /bin en GNU/Linux o todo ejecutable EXE o DLL en Windows.

Pues bien, como funciona todo esto? Pues en tiempo de instalación (SYSGEN), para crear un programa ejecutable en MVS, se linkedita con los módulos que sean necesarios de la DLIB y se crea el ejecutable en la Target, que a su vez se guarda en el disco que corresponda dentro de la librería que corresponda, como si se pareciera a un Makefile, oyes. Como veréis, este sistema de funcionamiento tiene muchas analogías con montar una Gentoo desde cero…

Vale, pero ¿Como instalo un parche?

El proceso de PTF tiene 3 fases bien diferenciadas: Recepción, Aplicación y Aceptación. La fase de recepción (RECEIVE) es cuando descargas la PTF de internet y la metes en el MVS y le dices a la GLOBAL que tienes una PTF descargada y lista para instalar. La GLOBAL entonces examina la PTF y determina que trozos de programas deben ser tocados, con la información de la TARGET y la DLIB.

La fase de Aplicación (APPLY) es la fase en la que instalas la PTF que te toca los módulos y programas que están en la TARGET, traduciendo, es cuando la PTF te toca el código para que inmediatamente quede instalada.

Y la ultima fase, la de aceptación (ACCEPT), es cuando ves que la PTF no ha “roto” nada y por tanto, esa PTF también toca la zona de DLIB para que los módulos fuente y objeto queden parcheados.

Esto da mucho juego, ya que si se instala mal la PTF siempre puedes volver atrás (siempre y cuando no hayas hecho un ACCEPT) en caso de que algo deje de funcionar, cosa poco probable, pero no imposible.

También comentar que según como quieras configurar el sistema, la instalación SMP/E puede tener varias zonas GLOBAL, varias DLIBs y varias TARGET, ya que IBM cataloga todos sus productos para mainframe en 4 bloques bien diferenciados: El Bloque OS, que incluye el z/OS, Cobol, VM, PL/I, y el sistema básico de un Sistema Operativo. Luego esta el DB, que incluye todo lo relacionado con bases de datos y tratamientos de datos: DB2, IMSDB, ImagePlus, etc. El tercer bloque hace referencia a todo lo transaccional, CICS, IMS, etc, y por último, el cuarto bloque es el del NCP o Communication Server, en el que se incluyen el propio NCP, el VTAM, TCP/IP, SNA, etc. Por tanto, se pueden llegar a tener, dependiendo de la instalación hasta 4 SMP/E distintos con toda su parafernalia de GLOBAL, DLIB y TARGET.

Así­ a primera vista parece que este sistema es muy manual, pero en realidad no lo es tanto, para mi es un sistema en el que controlas todo en todo momento y es muy eficaz y no te pasa como en Windows, que no sabes que hace cuando te instala algo (y lo peor es que una vez instalado un update en Windows, no lo puedes desinstalar).

Lo bueno de obligarte a leer los requisitos de una PTF es que aprendes mucho sobre la estructura interna y funcionamiento a nivel de programación de como se ensambla todo un Sistema Operativo, de verdad que si os gusta andar con las tripas de un ordenador, esto os encantará.

En un siguiente artículo, expondré un caso practico de cómo aplicar una PTF a un producto concreto para que veáis la mecánica, que no es tan difícil.

Seguridad en mainframe: Introducción al RACF

El artículo de hoy abordará a un nivel general el sistema de seguridad que todo mainframe con MVS posee: El Security Server o el tradicionalmente llamado RACF (Resource Access Control Facility).

Aunque pueda parecer que todos los sistemas de seguridad al final se basen en lo mismo, en el caso del mainframe es un caso aparte, ya que el sistema de seguridad de un mainframe se desarrolló junto con el desarrollo del sistema operativo y por tanto, es intrínseco y esta fuertemente acoplado al mismo. En cambio, otros sistemas tipo Unix y demás, la seguridad fue un desarrollo posterior y por tanto, sigue otras directrices. Pero vamos a lo que interesa.

RACF es un compendio de reglas de seguridad que se crean en base a unas clases. Una clase es un grupo de objetos los cuales queremos otorgarle un determinado acceso, por lo que todo objeto perteneciente a la misma clase tendrá el mismo nivel de seguridad. Por objeto se entiende desde un fichero, hasta un slot de proceso o abstracción funcional de software, por llamarlo de alguna manera.

Existen dos tipos de clases: Las denominadas “normales”, es decir, clases de acceso, facilitys, logging y demás. Y luego existen las clases “especiales”, que son dos: Las clases Usuario y las clases Dataset. Estas clases se denominan especiales porque pueden ser gobernadas por clases “normales” que les conferirán un cierto acceso, vamos, que estas clases pueden ser regidas por otras clases.

Evidentemente, la clase Usuario es muy importante porque se hace cargo de la seguridad referente al tipo de usuario, tipo de acceso a los elementos mainframe y que facilities tiene otorgado para realizar su trabajo.

Y la clase dataset es una clase especial que sirve para tener el control total sobre todo elemento susceptible de grabarse en disco o cinta.

Por tanto, se podría decir que RACF controla TODO el sistema internamente (procesos, subprocesos, schedulers, dispatchers, el núcleo, etc), controla los usuarios, el acceso de los usuarios a los datos, el acceso de los mecanismos de acceso a los datos, la interacción de los mecanismos de acceso con los procesos, vamos, es la leche.

Tanta complejidad tiene explicar los entresijos del RACF, que lo único que se me ocurre para explicar como funciona es poner ejemplos que me encuentro en instalaciones con problemas que surgen de autorizaciones y como solucionarlos para que vayáis haciéndoos una ligera idea de hasta donde llegan los tentáculos de este magnifico pero complejísimo sistema de seguridad.

Ejemplo de error de autorización

Por lo general, los errores de acceso suelen aparecer en el LOG del sistema y suelen tener la misma estructura. Únicamente cambian los tipos de campos en cada caso. Por tanto, debemos saber interpretarlos para saber que es lo que está sucediendo:

17.09.55 STC00098  ICH408I USER(START2  ) GROUP(SYS1    )
NAME(        )
SYS1.CPAC.HZSPDATA CL(DATASET ) VOL(OSWORK)
INSUFFICIENT ACCESS AUTHORITY
FROM SYS1.* (G)
ACCESS INTENT(UPDATE )  ACCESS ALLOWED(READ   )
17.09.55 STC00098  IEC150I 913-38,IFG0194E,HZSPROC,HZSSTEP,HZSPDATA,1014,OSWORK,SYS1.CPAC.HZSPDATA
17.09.55 STC00098 *HZS0015E PROBLEM WITH HZSPDATA DATA SET:
COULD NOT OPEN

Significa que el usuario START2 del Grupo SYS1 con respecto a la clase DATASET pretende hacer un UPDATE cuando solo tiene permitido un READ al fichero SYS1.CPAC.HZSPDATA. Por tanto, se pueden hacer dos cosas: Si ese usuario no debe tener permiso, no se lo damos y que se joda, o debemos darle permisos para que pueda hacer lo que necesita. En nuestra instalación el usuario START2 es un usuario que se encarga principalmente de arrancar STARTED TASKS, ya que lo hemos configurado asÍ­ en el RACF a menos que creemos un usuario específico para esa started task específica (que suele ser así­ en la mayoría de los casos, pero yo soy un dejado y un irresponsable y uso el mismo usuario para arrancar cualquier started-task, pasa algo? Je je je).

Al tratarse de una clase DATASET, es una clase ESPECIAL que tiene su propio menú en el RACF. Por tanto, para dar el acceso es algo diferente. Los pasos a seguir son los siguientes:

1.- Acceder al Interfaz de RACF y teclear la opción 1 DATA SET PROFILES. Esto nos llevará al submenú de seguridad a nivel de datasets.

racf-11
Fig. 1: Pantalla principal de RACF

racf-12
Fig. 2: Seguridad de DATASETS

2.- Lo primero que haremos será elegir la opción S o 9 de SEARCH, para comprobar si la clase dataset de la que se queja, existe (que debería existir). Esta clase es la SYS1.* (G).

3.- En la pantalla de la Figura 3, no añadiremos ninguna máscara especial, simplemente daremos a Enter.

racf-13
Fig. 3: Mascaras de búsqueda.

4.- En la pantalla de la Figura 4, escribiremos ALL en la opción TYPE para que nos liste todo lo que tiene controlado.

racf-14
Fig. 4: Tipos de Datasets

5.- Al dar enter, nos saldrá una lista de todos los datasets que están controlados en la instalación. Y efectivamente, el dataset SYS1.* (G) existe.

racf-15
Fig. 5: Salida de la búsqueda.

6.- Pulsaremos sobre PF3 y volveremos a la pantalla de la figura 2. En ella, elegiremos la opción 4 ACCESS, lo que nos llevará a la figura siguiente:

racf-16
Fig. 6: Configuración de Acceso.

7.- En PROFILE NAME, escribiremos el dataset al que queremos tener más acceso. En nuestro caso, SYS1.* y pulsaremos sobre la tecla Enter.

8.- Añadiremos un usuario para darle acceso, por lo que daremos a 1 ADD.

racf-17
Fig. 7: Lista de Accesos

9.- En la siguiente figura, como no queremos copiar ningun perfil predefinido, vamos a poner SPECIFY a YES.

racf-18
Fig. 8: Especificar manualmente los usuarios

10.- Y para cambiar el acceso que tenia de READ, pondremos AUTHORITY a UPDATE y le diremos a que usuarios le daremos esa autoridad, en este caso a uno, START2.

racf-19
Fig. 9: Cambiar la autorización al usuario START2.

11.- Una vez dado a Enter, aparecerá un PROFILE CHANGED. Pero todavía falta hacer un último paso: Refrescar el RACF. Para ello, daremos a PF3 tantas veces como sea necesario hasta llegar al menú principal del RACF. Para refrescar los datos, elegiremos la opción 5 SYSTEM OPTIONS y nos aparecerá un menú como el de la figura 10.

racf-20
Fig. 10: Menú de Opciones de Seguridad de RACF

racf-21
Fig. 11: Opciones de Refresh.

12.- Marcaremos la opción 6 REFRESH y eso nos llevara a otra ventana con las opciones de refresh, de acuerdo a la Figura 11. Lo mas sencillo es elegir la última opción, la de PROFILES FOR SPECIFIC CLASSES a YES y eso nos permitirá refrescar únicamente la clase a la que hemos cambiado las opciones, de acuerdo a la Figura 12.

13.- En esa ventana (Fig. 12) escribiremos la clase específica (DATASET) y actualizaremos la zona GLOBAL y GENERICA. En un principio también hemos elegido la RACLIST, pero nos ha salido un error de RACF diciendo que esa clase no toca la RACLIST, así­ que hemos quitado el YES de esa columna y hemos vuelto a aplicar los cambios.

14.- En este momento, si volvemos a lanzar el proceso que daba fallo, ya no debería darlo más.

racf-22
Fig. 12: Clase específica a Refrescar.

Como habéis podido comprobar, es un sistema bastante completo y son muchos pasos los que hay que dar para simplemente asignar un permiso concreto a un usuario concreto a un grupo de ficheros concreto. Pero ahi radica el control del sistema, es decir, tener todo controlado y todo auditado por RACF.

Cualquier purista de Unix dirá que con hacer un simple chown y un chmod tienes solucionado el problema, pero no hay que olvidar que, a pesar de lo que pueda decir la gente, la seguridad de los sistemas Unix no deja de ser de juguete comparado con este sistema, de ahi su simplicidad, y en cambio la robustez de un mainframe esta marcada sobre todo por una seguridad eficiente, no en vano es una de las maquinas mas seguras del mundo.