• principal_3

    Desde 2015, enseñando sobre el sistema operativo z/OS de IBM en esta web. z/OS se utiliza en máquinas llamadas Mainframe.

  • principal_1

    Para realizar el contenido, utilizo el producto de IBM llamado z/Development and Test Environtment Personal Edition. Este software permite emular un Mainframe y así poder utilizar z/OS para aprender.

  • principal_2

    Es utilizado por grandes empresas (bancos, aseguradoras...). Aquí aprenderás a instalar y configurar productos relacionados con z/OS.

  • principal_4

    ADCD es una distribución de z/OS que contiene productos de IBM como IMS, DB2, CICS, ZOWE, TWS, NetView, System Automation, etc.

CICS - Habilitando seguridad RACF Parte 1/2

Adjuntos:
Descargar este archivo (DFH$CATB.txt)DFH$CATB[Define recursos CICS en RACF]1 kB

Hace unos días un usuario del blog me solicitó si podía hacer una entrada para configurar la seguridad en CICS. Por defecto, en las versiones ADCD, esta seguridad viene deshabilitada. En esta entrada veremos cómo habilitar la seguridad en CICS, cómo definir recursos en RACF, y dar permisos, y cómo definir e instalar terminales en CICS.

Podría haber hecho una entrada más corta, pero he incluido imágenes que muestran cómo van afectando al proceso ciertos pasos que realizaremos.

Empezaremos entrando a CICS para confirmar que no tenemos la seguridad activa. Se mostrará la pantalla que vemos en la imagen. Esta pantalla se corresponde con la transacción CSGM.

 

Borraremos la pantalla con la tecla “Pausa” del teclado y pondremos la transacción de sign-on “CESN”.

 

Nos aparecerá un mensaje indicando que la seguridad no está activa.

 

Esto es debido a que en la configuración de CICS tenemos deshabilitada la seguridad. Para habilitarla haremos lo siguiente:

Buscaremos la tarea correspondiente a nuestro CICS en la PROCLIB de nuestro sistema. En mi caso, la librería es ADCD.Z113.PROLIB y el nombre de la tarea es CICS42.

Nos apuntaremos el valor del parámetro INDEX1, en mi caso DFH420, y el valor del parámetro SIP, en mi caso 1.

 

Para poder habilitar la seguridad, buscaremos la línea que hace referencia al miembro DFH$SIP, ya que dentro se encuentra la opción para activar la seguridad.

En mi caso, sería &INDEX1..SYSIN(DFH$SIP&SIP). Sustituyendo los parámetros que hemos visto en el paso anterior, quedaría DFH420.SYSIN(DFH$SIP1).

 

Buscamos el miembro DFH420.SYSIN(DFH$SIP1) y lo editamos. Veremos que el parámetro SEC está a NO.

 

Ponemos SEC=YES y salvamos.

 

En caso de tener arrancado el CICS lo pararemos desde SDSF con  el comando “F nombre_cics,CEMT P SHUT” en mi caso sería:

F CICS42,CEMT P SHUT     

 

Una vez parado, lo volveremos a arrancar con el comando “S nombre_cics”. Este arranque va a fallar. Esto es una señal de que la seguridad está habilitada, pero no hemos otorgado los permisos correspondientes en RACF.

 

En la salida, veremos el error “Resource profiles could not be built for class ACICSPCT. CICS is  terminated.” Esto es debido a que la clase ACICSPCT no está activa en RACF.

 

Para activarla, entramos en RACF.

 

Entraremos en la opción 5 – System Options.

 

Entraremos en la opción 1 – Display para ver las clases que tenemos activas.

 

Si buscamos “ACICSPCT”, veremos que no aparece en la lista de “ACTIVE CLASSES”.

 

Debemos activar esa clase. Si buscamos otras clases que hagan referencia a CICS, veremos las siguientes. Debemos activarlas también.

CCICSCMD

DCICSDCT

FCICSFCT

JCICSJCT

MCICSPPT

PCICSPSB

RCICSRES

SCICSTST

TCICSTRN

 

Para activar la clase, pulsamos F3 y entramos en la opción 3 – Class Options.

 

En la última opción, SPECIFIC CLASSES, pondremos YES, para activar sólo la clase que deseemos.

 

Podremos la lista de las clases y en la columna ACTIVE pondremos YES.

 

Aparecerá un mensaje indicando “CLASS OPTIONS SET”. Volveremos a entrar en la opción 1.

 

Ahora veremos que las clases están activas.

 

Si intentamos arrancar la tarea de nuevo, veremos que ahora falla porque tenemos que definir el usuario CICSUSER en RACF.

 

Entraremos en la opción “4 – User Profiles And Your Own Password” del panel principal de RACF.

 

Añadiremos el usuario CICSUSER con la opción 1.

 

No es necesario poner ningún grupo.

 

Pulsaremos Intro.

 

Comprobaremos que se ha creado.

Como se indica en el siguiente enlace debemos permitir al usuario que controla la tarea CICS42 que pueda ejecutar las transacciones de arranque (CATA, CATD, CDBD, etc.). En nuestro caso, se trata del usuario START2.

CICS - Category 1 transactions

 

Usaremos el ejemplo DFHXXX.CICS.SDFHSAMP(DFH$CAT1), en mi caso, DFH420.CICS.SDFHSAMP(DFH$CAT1). Lo editamos.

 

Podemos cambiar el OWNER, pero yo lo dejo por defecto. Dejaremos por defecto el parámetro CLASSNAME. Como ACCESSLIST pondré el grupo “SYS1” y los usuarios “START2” y “CICSUSER”.

 

Casi al final añadiremos las siguientes líneas (revisad la imagen):

RDEFINE  SURROGAT  CICSUSER.DFHINSTL  UACC(NONE) OWNER(IBMUSER)     

PERMIT   CICSUSER.DFHINSTL  CLASS(SURROGAT) ID(START2)  ACCESS(READ)

SETROPTS RACLIST (TCICSTRN) REFRESH                                 

SETROPTS RACLIST (SURROGAT) REFRESH              

 

Esos comandos definirá el recurso CICUSER.DFHINSTL en la clase SURROGAT. Después se permitirá el acceso en modo lectura al usuario START2. Por último, refrescaremos las clases TCICSTRN y SURROGAT para que cojan los cambios.

NOTA: La clase que hay que refrescar es la TCICSTRN porque GCICSTRN es un grupo de clases.

 

Salvaremos y saldremos. Pondremos el comando “EX” delante del miembro para ejecutarlo.

 

Ahora arrancaremos de nuevo la tarea CICS42.

 

La tarea debería arrancar correctamente y dar el mensaje “Control is being given to CICS”. También se observa un error indicando que el usuario ADCD no está definido. Debemos crearlo siguiendo los mismos pasos que hicimos con el usuario CICSUSER.

 

Ahora entraremos a CICS y veremos que ya no sale la pantalla que salía cuando teníamos la seguridad deshabilitada. En cambio, sale un mensaje que indica que para usar la transacción CSGM, debemos estar logados. Escribiremos la transacción CESN para logarnos.

 

Aparcerá la pantalla de logon. Pondremos los datos.

 

Veremos el mensaje “Sign-on is complete”.

 

Pero si intentamos ejecutar una transacción como CEMT, nos dirá que no tenemos permisos. Vamos a ver cómo se pueden dar estos permisos.

 

Si antes editamos DFH420.CICS.SDFHSAMP(DFH$CAT1), ahora editaremos el miembro DFH$CAT2 de la misma librería. Este ejemplo sirve para asignar grupos de transacciones (CEDA, CEMT, etc.) a determinados grupos de usuarios (sysadmin, developer, operator…).

 

Bajamos y deberemos establecer el OWNER, NOTIFY. Yo lo voy a dejar todo por defecto. Además deberemos establecer que grupo o grupos queremos que tengan acceso a cada grupo de transacciones. A mi me interesa una configuración básica, por lo tanto, voy a poner un grupo nuevo que NO SEA SYS1. Lo adecuado sería tener grupos distintos para cada perfil de usuario (sysadm, developer, operator…). Al grupo lo llamaré CICS1.

 

Según vayamos bajando, veremos a que transacciones tendrá cada grupo de usuarios. Le añadiremos casi al final la siguiente línea para refrescar los cambios:

 SETROPTS RACLIST (TCICSTRN) REFRESH                                  

 

Como detalle nos podemos fijar que la transacción CSGM está permitida para todos los usuarios (ALLUSER).

 

Antes de ejecutarlo, partimos la pantalla y vamos a RACF para crear el grupo CICS1. Para ello, vamos a la opción 3.

 

Elegiremos la opción “1 – ADD” y en el nombre pondremos CICS1.

 

En OWNER ponemos IBMUSER y en SUPERIOR GROUP ponemos SYS1. Pulsamos Intro y lo crearemos.

 

Volvemos a la otra pantala y ejecutamos el miembro DFH$CAT2 poniendo EX delante.

 

Saldrá el mensaje de confirmación y ningún error.

 

Ahora volvemos a conectarnos a CICS. Ahora si aparece la pantalla que veíamos antes (transacción CSGM).

NOTA: Para verificar bien los permisos, debemos usar un usuario distinto a IBMUSER porque es el OWNER de los recursos de RACF que hemos definido.

 

Vamos a hacer 3 pruebas de uso de transacción: sin usuario, con el usuario IBMUSER y con el usuario ADCDMST.

Sin usuario. No debemos poder dar transacciones como CEDA o CEMT.

 

Usuario ADCDMST.

Damos la transacción CESN y nos logamos con el usuario ADCDMST.

 

Como aún no lo hemos añadido al grupo CICS1, no debemos poder usar transacciones.

 

Usuario IBMUSER.

Nos logamos con el usuario IBMUSER.

 

Como este usuario es el OWNER de lo recursos que hemos definido, si puede utilizarlos.

 

El sigueinte paso es conectar el usuario ADCDMST al grupo CICS1 y comprobar que puede usar transacciones.

Vamos a la opción 3 de RACF.

 

Vamos a la opción “4 – Connect” y ponemos el grupo CICS1.

 

Pondremos el usuario ADCDMST. En Default UACC pondremos READ y en Group Authority pondremos USE.

 

Pondremos YES en Group Access.

 

Nos aparecerá un mensaje indicando “User connected”.

 

Cuando volvamos a entrar con el usuario ADCDMST, ya podremos dar comandos.

 

 

IMPORTANTE

Hay otros recursos que se deben definir en RACF para poder realizar todas las acciones que permite CICS, incluso para parar la tarea (CEMT P SHUTDOWN). Dejo dos enlace donde vienen todos los recursos disponibles:

CICS resources subject to command security checking

CICS - Resource and command check cross-reference

 

Vamos a ver como podemos habilitar que el grupo CICS1 y el usuario IBMUSER, puedan parar el CICS realizando “CEMT P SHUT”. Usando como ejemplo el miembro DFH$CAT1, crearemos un nuevo miembro llamado DFH$CATB, con el siguiente código:

NOTA: Se puede descargar al principio de la entrada.

 

PROC 0                                                     

CONTROL MAIN ASIS  /* LIST CONLIST SYMLIST                                                                 

RDEFINE VCICSCMD CMDSAMP UACC(NONE) +                      

        NOTIFY(IBMUSER) +                                  

        ADDMEM(AUTINSTMODEL, AUTOINSTALL, +                

        CONNECTION, DSNAME, TRANSACTION, TERMINAL, +       

        TRANDUMPCODE, VTAM, SHUTDOWN) +                    

        OWNER(IBMUSER)                                                                                     

/* Con ACCESS(READ) solo permitiria INQUIRE. */            

/* Con UPDATE permite PERFORM, SET y DISCARD */            

PERMIT CMDSAMP CLASS(VCICSCMD) ID(CICS1) ACCESS(UPDATE)                                         

SETROPTS RACLIST (CCICSCMD) REFRESH                        

SETROPTS RACLIST (TCICSTRN) REFRESH                                                                             

WRITENR TERMINADO                                          

WRITE                                                      

WRITENR End of DFH$CATB CLIST                              

 

Con esto definiremos algunos comandos y permitiremos su uso para el grupo CICS1. El usuario IBMUSER también podrá usarlos, al ser OWNER.

 

Lo ejecutaremos poniendo EX al principio.


A modo informativo, dejo otros comandos de RACF que pueden ser útiles.  

Si quiesemos añadir otros recursos, deberíamos usar el comando RALTER para añadirlos porque ya hemos definido la clase con el comando RDEFINE del paso anterior:

RALTER  VCICSCMD CMDSAMP UACC(NONE) +                               

              ADDMEM (TERMINAL)                                     

 

Si queremos borrar la clase para volver a definirla, usaremos el comando:

RDELETE VCICSCMD CMDSAMP    

 

Para comprobar algunos de los permisos que hemos otorgado durante el tutorial, podemos usar los comandos:

RLIST TCICSTRN CEMT RESGROUP   

RLIST GCICSTRN SYSADM AUTHUSER 

RLIST VCICSCMD CMDSAMP AUTHUSER

 

Si queremos quitar algún permiso a un usuario o un grupo de usuarios, usaremos el comando:

PERMIT CMDSAMP CLASS(VCICSCMD) ID(XXXXXX) ACCESS(NONE)   

Por ejemplo:

PERMIT CMDSAMP CLASS(VCICSCMD) ID(CICS1) ACCESS(NONE)   


Llegados a este punto deberíamos poder logarnos en CICS y pararlo usando “CEMT P SHUTDOWN” desde los paneles, pero aún no podremos realizar esta tarea desde la consola ni desde batch (JCL). En la segunda parte veremos cómo podemos resolver esto:

CICS - Habilitando seguridad RACF Parte 2/2

 

 

Publish modules to the "offcanvs" position.