Além de datasets, o RACF protege uma enorme variedade de recursos: terminais VTAM, classes de jobs, transações CICS, comandos TSO, programas APF, facilities do sistema. Todos esses recursos são gerenciados com os comandos RDEFINE, RLIST, RALTER, RDELETE e PERMIT — usando classes de recursos como organizador.
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.
| Classe | O que protege |
TERMINAL | Terminais VTAM — controla de qual terminal um usuário pode logar |
TSOAUTH | Comandos e atributos TSO (ACCT, JCL, MOUNT, OPER, RECOVER) |
TSOPROC | Logon procedures TSO permitidas |
JESJOBS | Controle de jobs JES — submissão e acesso ao output |
JESSPOOL | Acesso a spool jobs de outros usuários |
FACILITY | Facilities do sistema — SAF calls de programas e subsistemas |
APPL | Aplicações — controla quais usuários podem usar cada aplicação |
TCICSTRN | Transações CICS |
GCICSTRN | Grupos de transações CICS (genérico) |
PROGRAM | Programas APF — controla uso de programas privilegiados |
STARTED | Started 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.