1. Classes de recursos RACF

Enquanto a proteção de datasets usa a classe DATASET implicitamente, recursos gerais usam classes nomeadas. Cada classe agrupa um tipo de recurso e pode ser ativada ou desativada independentemente.

🦕 Analogia — classes como tipos de crachá

Pense nas classes como categorias de controle de acesso em um prédio corporativo: há controle de acesso para salas (DATASET), para catracas de andar (TERMINAL), para o datacenter (FACILITY), para sistemas específicos (APPL). Cada categoria tem suas próprias regras, mas o mecanismo de verificação é sempre o mesmo.

ClasseO que protege
TERMINALTerminais VTAM — controla de qual terminal um usuário pode logar
TSOAUTHComandos e atributos TSO (ACCT, JCL, MOUNT, OPER, RECOVER)
TSOPROCLogon procedures TSO permitidas
JESJOBSControle de jobs JES — submissão e acesso ao output
JESSPOOLAcesso a spool jobs de outros usuários
FACILITYFacilities do sistema — SAF calls de programas e subsistemas
APPLAplicações — controla quais usuários podem usar cada aplicação
TCICSTRNTransações CICS
GCICSTRNGrupos de transações CICS (genérico)
PROGRAMProgramas APF — controla uso de programas privilegiados
STARTEDStarted tasks — define o USERID e grupo dos started tasks

2. RDEFINE — criando perfis gerais

O RDEFINE (Resource DEFINE) cria um perfil em qualquer classe:

RDEFINE classe nome-do-perfil UACC(NONE) OWNER(owner)

Exemplos:

/* Restringir login ao terminal de produção */ RDEFINE TERMINAL PRD001 UACC(NONE) OWNER(RACFADM1) /* Proteger transação CICS de consulta de saldos */ RDEFINE TCICSTRN CSAL UACC(NONE) OWNER(RACFADM1) /* Proteger aplicação inteira por nome */ RDEFINE APPL SISBANC UACC(NONE) OWNER(RACFADM1) /* Definir started task com USERID e grupo */ RDEFINE STARTED DBMSTR.* STDATA(USER(DBMSTC) GROUP(STCGRP) PRIVILEGED(NO) TRUSTED(NO))

O perfil STARTED com STDATA define qual USERID o z/OS usa quando inicia um started task — é como o sistema operacional "loga" o DBMS, TCP/IP ou qualquer address space automaticamente.

3. PERMIT em recursos gerais

O PERMIT funciona da mesma forma que para datasets, mas exige a especificação da classe:

/* Permitir acesso de grupo ao terminal de produção */ PERMIT PRD001 CLASS(TERMINAL) ID(GRPDESENV) ACCESS(READ) /* Dar acesso à transação CICS para grupo de atendimento */ PERMIT CSAL CLASS(TCICSTRN) ID(GRPATEND) ACCESS(READ) /* Dar acesso à aplicação completa */ PERMIT SISBANC CLASS(APPL) ID(GRPATEND) ACCESS(READ) PERMIT SISBANC CLASS(APPL) ID(GRPDESENV) ACCESS(READ)

4. RLIST e RALTER

O RLIST exibe um perfil de recurso geral:

RLIST TCICSTRN CSAL ALL Saída: CLASS NAME ----- ---- TCICSTRN CSAL LEVEL OWNER UNIVERSAL ACCESS YOUR ACCESS WARNING 00 RACFADM1 NONE READ NO GROUP ACCESS LIST: GROUP ACCESS GRPATEND READ

O RALTER altera um perfil existente:

/* Ativar auditoria em transação crítica */ RALTER TCICSTRN CSAL AUDIT(ALL(READ)) /* Mudar UACC de uma facility */ RALTER FACILITY IRR.RADMIN.LISTUSER UACC(NONE) /* Deletar um perfil de recurso geral */ RDELETE TCICSTRN CSAL

5. Classes mais importantes

Classe FACILITY — controla facilities do sistema operacional e subsistemas:

/* RACF admin facilities — quem pode listar usuários */ RDEFINE FACILITY IRR.RADMIN.LISTUSER UACC(NONE) PERMIT IRR.RADMIN.LISTUSER CLASS(FACILITY) ID(GRPSUPORTE) ACCESS(READ) /* BPX.SUPERUSER — acesso root no Unix System Services */ RDEFINE FACILITY BPX.SUPERUSER UACC(NONE) PERMIT BPX.SUPERUSER CLASS(FACILITY) ID(RACFADM1) ACCESS(READ)

Classe JESJOBS — controla submissão de jobs:

/* Restringir quem pode submeter jobs com JOBNAME=PROD* */ RDEFINE JESJOBS SUBMIT.PROD* UACC(NONE) PERMIT SUBMIT.PROD* CLASS(JESJOBS) ID(GRPPRODUCAO) ACCESS(READ)

Classe TSOAUTH — controla atributos TSO:

/* Conceder atributo JCL (permite submeter jobs via TSO) */ RDEFINE TSOAUTH JCL UACC(NONE) PERMIT JCL CLASS(TSOAUTH) ID(GRPDESENV) ACCESS(READ) /* Atributos TSO disponíveis: ACCT, JCL, MOUNT, OPER, RECOVER */

6. SETROPTS — ativando classes

Uma classe precisa estar ativa para que o RACF a verifique. O SETROPTS gerencia as opções globais do RACF:

/* Ativar uma classe */ SETROPTS CLASSACT(TCICSTRN) /* Ativar classe e manter em memória (RACLIST) para performance */ SETROPTS CLASSACT(TCICSTRN) RACLIST(TCICSTRN) /* Após alterar perfis de classe com RACLIST, forçar refresh */ SETROPTS RACLIST(TCICSTRN) REFRESH /* Desativar uma classe */ SETROPTS NOCLASSACT(TCICSTRN) /* Ver status atual de todas as classes */ SETROPTS LIST

⚠️ RACLIST e o REFRESH obrigatório

Quando uma classe está com RACLIST ativo, os perfis são copiados para memória para performance. Se você adicionar ou alterar perfis nessa classe com RDEFINE, RALTER ou PERMIT, as mudanças não entram em vigor até que seja executado SETROPTS RACLIST(classe) REFRESH. Esquecer o REFRESH é uma das causas mais comuns de "configurei e não funcionou" em RACF.