![[z/OS]](../images/ngzos.gif)
Herramientas RACF (Resource Access Control Facility)
Las siguientes herramientas y técnicas le
ayudarán a gestionar las definiciones de seguridad que se utilizan para WebSphere Application Server para z/OS:
- Paneles RACF ISPF para listar todos los perfiles en una clase
- ISHELL para listar los UID por orden de UID o ID de usuario
- EXEC para listar los GID por orden de GID o ID de grupo
- EXEC para restituir definiciones RACF
Paneles RACF ISPF
Utilice los paneles RACF ISPF para listar todos los
perfiles que hay en una determinada clase.
Debe tener autorización RACF SPECIAL o AUDITOR para completar los pasos siguientes:
- Seleccione Perfiles de recursos generales (opción 2).
- Realizar búsqueda (opción S o 9).
- Escriba un nombre de clase.
- Pulse Intro dos veces más.
------------------------------------------------ RACF - MENÚ DE OPCIONES DE SERVICIOS OPCIÓN ===> 2 SELECCIONE UNO DE LOS SIGUIENTES: 1 PERFILES DE CONJUNTOS DE DATOS 2 PERFILES DE RECURSOS GENERALES 3 PERFILES DE GRUPOS Y CONEXIONES DE USUARIOS CON GRUPOS 4 PERFILES DE USUARIOS Y SU PROPIA CONTRASEÑA 5 OPCIONES DEL SISTEMA 6 RECURSO DE COMPARTICIÓN REMOTA 7 CERTIFICADOS DIGITALES Y CONJUNTOS DE CLAVES 99 SALIR ------------------------------------------------ ----------------------------------------------------- RACF - SERVICIOS DE PERFILES DE RECURSOS GENERALES SELECCIONE UNO DE LOS SIGUIENTES: 1 ADD Añadir un perfil 2 CHANGE Cambiar un perfil 3 DELETE Suprimir un perfil 4 ACCESS Mantener lista de acceso 5 AUDIT Supervisar intentos de acceso (sólo para auditores) D o 8 DISPLAY Mostrar contenido de perfiles S o 9 SEARCH Buscar perfiles en la base de datos RACF ----------------------------------------------------- ------------------------------------------ RACF - SERVICIOS DE RECURSOS GENERALES - BUSCAR OPCIÓN ===> ENTRE LA SIGUIENTE INFORMACIÓN DE PERFIL: CLASE ===> INICIADA PERFIL ===> ------------------------------------------ ----------------------------------- EXAMINAR - SALIDA DEL MANDATO RACF ---- MANDATO ===> T5ACR.* (G) T5DMN.* (G) T5SRVNDS.* (G) T5SRV1S.* (G) T5SRV2S.* (G) T5SRV3S.* (G) WMQX*.* (G) WSCWTRC.* -----------------------------------
También puede obtener una lista de todos los perfiles que hay en una clase utilizando el mandato RACF SEARCH: SEARCH CLASS(nombre_clase).
Listar todos los ID de usuario por orden de UID
Cuando se definen nuevos
ID de usuario con segmentos OMVS en RACF, se deben asignar UID exclusivos. WebSphere no da soporte todavía a la función RACF AUTOUID. Para encontrar UID no asignados (y
duplicados), utilice ISPF ISHELL (opción 3.4) para obtener una lista de todos los ID
de usuario por orden de UID. Tiene que ser un superusuario (UID=0) y seguir estos pasos:
- Seleccione el menú desplegable Setup (Configurar) y la opción User list (Lista de usuarios).
- Examine la lista de usuarios.
- Mientras examina la lista de usuarios, seleccione el menú desplegable File (Archivo).
- Seleccione la opción Sort UID (Ordenar UID). (Tenga en cuenta que un UID igual a -1 significa que el usuario no tiene ningún segmento OMVS).
El ejemplo siguiente muestra los paneles implicados:
---------------------------------------------------------------------------------------- File Directory Special_file Tools File_systems Options Setup Help ---------------------------------------------------------------------------------------- UNIX System Services ISPF Shell Command ===> _______________ ---------------------------------------------------------------------------------------- ----------------------------- 1. User... 2. User list... 3. All users... 4. All groups... 5. Permit field access... 6. Character Special... 7. Reset UID to 847039 ----------------------------- -------------------------------------------------------------------- File Help -------------------------------------------------------------------- User List Command ===> -------------------------------------------------------------------- User ID UID Group -------------------------------------------------------------------- ADMOORE 1024996 $GUSERS /u/admoore AHMAD 2 DFSGRP /u/ahmad AKILOV 125406 $GUSERS /u/akilov ALLMOND 36 DFSGRP /u/allmond AOPUSER 99129934 AOPOPER /u/aopuser ASTLEY 787202 DFSGRP /u/astley A5USR 112501 A5GRP /tmp BAGWELL 342832 DFSGRP /u/bagwell --------------------------------------------------------------------- ----------------------------- 1. Sort name 2. Sort UID 3. Sort Group 4. Print 5. Exit User ID UID Group ----------------------------- ----------------------------------------------- User ID UID Group ----------------------------------------------- CBASRUH 2336 CBASRH CBIVPH 2337 CBIVPGH T5GUEST 2402 T5GUESG T5ADMIN 2403 T5CFG T5DMNU 2411 T5CFG T5ACRNDU 2421 T5CFG T5DMGSU 2422 T5SVRG T5ASRNDU 2422 T5SVRG T5ACRU 2431 T5CFG T5ASRU 2432 T5SVRG WSPETSC 2701 WSCNTLG -----------------------------------------------
Listar todos los ID de usuario por orden de GID
También debe asignar GID
exclusivos a los nuevos grupos. No hay ninguna herramienta suministrada por el
sistema para listar los grupos por orden de GID (como hay para los UID), para que
pueda identificar duplicados y asignar nuevos GID que sean exclusivos. Especifique
GID como el único parámetro para listarlos por orden de GID. El valor por
omisión es listarlos por orden de ID de grupo.
(necesita autorización RACF SPECIAL, AUDITOR u otra autorización específica).
/* Rexx ---------------------------------------------------------- */
/* Este ejecutable utiliza el servicio ishell bpxwirac para mostrar el grupo */
/* con segmentos OMVS y los ID de grupo. B. Pierce & MJ Loos */
/* --------------------------------------------------------------- */
/* Sintaxis : LISTGRP Nombre (valor predeterminado) | GID */
/* --------------------------------------------------------------- */
order = "N" /* set default to name */
Arg parm /* get argument for sort order */
if Abbrev("NAME",parm,1) then order = "N"
if Abbrev("GID",parm,1) then order = "I"
call bpxwirac "OMVSGROUP" /* call the service */
Address ISPEXEC /* using ISPF services */
if order = "N" then do /* already sorted */
do ix=1 by 1 while queued()>0
parse pull gname gid
say left(gname,8) right(gid,8)
end
end
else do /* sort the results */
"TBCREATE grptable names(tbgrpnm tbgrpid) replace nowrite"
rows = 0
do ix=1 by 1 while queued()>0 /* populate the table */
parse pull gname gid
tbgrpnm = left(gname,8)
tbgrpid = right(gid,8)
"TBADD grptable"
rows = rows + 1
end
"TBSORT grptable FIELDS(tbgrpid,C,A,tbgrpnm,C,A)" /* sort it */
"TBTOP grptable"
do ix = 1 to rows by 1 /* display the results */
"TBSKIP grptable"
say tbgrpnm tbgrpid
end
"TBEND grptable" /* throw out the table */
end
say
exit 0
/***************** fin de EXEC ****************************/
Restituir definiciones de RACF
Cuando se configuran servidores, nodos y células (y se suprimen), resulta práctico tener una forma sencilla de suprimir las definiciones RACF que se crean en el proceso.
El ejecutable adjunto lee los mandatos RACF generados del miembro BBOWBRAK del conjunto de datos particionados .DATA de destino, y crea RACF DELUSER, DELGROUP, RDELETE y otros mandatos RACF (en orden inverso).
Antes de ejecutar los mandatos RACF resultantes, debe revisar la salida y suprimir los mandatos que supriman los usuarios, grupos o perfiles utilizados por otros servidores que desee mantener.
Consejo: Tenga cuidado de no suprimir usuarios y perfiles genéricos utilizados por otros.
/* REXX - UNDO2 - Crear mandatos RACF restitución para desinstalar el servidor*/ Lea los mandatos RACF en linein.in, analice el verbo & Obj, pase los mandatos "delete/undo" a cmdOut.out, y escriba en orden inv */ out = 1 /* Output line number for stem var. cmdOut. */ "EXECIO * DISKR RACFCMDS (STEM linein." do in = 1 to linein.0 /* See what we read; call the appropriate rtne */ if pos('/*',linein.in) <> 0 then iterate if pos('say',linein.in) = 1 then iterate parse var linein.in '"' cmdVerb cmdObj '"' select when cmdVerb = "ADDGROUP" then call DelGrp when cmdVerb = "ADDUSER" then call DelUsr when cmdVerb = "CONNECT" then call ConUsr when cmdVerb = "RDEFINE" then call DelPro when cmdVerb = "PERMIT" then call PerUsr when cmdVerb = "RACDCERT" then call RdCert otherwise iterate end /* select */ end /* in=1 to n */ call WriteCmds exit 1 return /*************** Subrutinas: ********************/ DelUsr: /* DelUsr: Delete User */ parse var cmdObj user . cmdOut.out = "DELUSER " || user out = out + 1 return DelGrp: /* DelGrp: Delete Group */ parse var cmdObj group . cmdOut.out = "DELGROUP " || group out = out + 1 return ConUsr: /* ConUsr: Remove user from a group */ cmdOut.out = "REMOVE " || cmdObj out = out + 1 return DelPro: /* DelPro: Delete Profile */ parse var cmdObj class profile acc . cmdOut.out = "RDELETE " || class profile out = out + 1 return PerUsr: /* PerUsr: Remove permission from a profile */ parse var cmdObj profile class ID acc parse value cmdObj with 'ID(' id ')' acc cmdOut.out = 'PERMIT '||profile class||' ID('||ID||') DELETE' out = out + 1 return RdCert: /* RdCert: Remove Certificates */ if pos('GENCERT',cmdObj) <> 0 then DO if pos('CERTAUTH',cmdObj) <> 0 then DO parse value cmdObj with 'WITHLABEL(' cert ')' cmdOut.out = 'RACDCERT CERTAUTH DELETE(LABEL(' || cert || '))' out = out + 1 END ELSE DO parse value cmdObj with 'WITHLABEL(' cert ')' parse value cmdObj with 'ID (' id ')' cmdOut.out = 'RACDCERT ID('||id||') DELETE(LABEL('||cert||'))' out = out + 1 END END if pos('ADDRING',cmdObj) <> 0 then DO parse value cmdObj with 'ADDRING(' ringname ')' parse value cmdObj with 'ID(' user ')' cmdOut.out = 'RACDCERT DELRING('||ringname') ID('||user')' out = out + 1 END return /* Finalizado - extraiga pila LIFO y escríbala *******************/ WriteCmds: DO i = out-1 to 1 by -1 QUEUE cmdOut.i EXECIO 1 DISKW RACFUNDO END return