Introduction
The RACF documentation has a lot of excellent reference materials describing the syntax of the commands, but I could not find much useful information on how to set up RACF specifically for products like MQ, CICS, Liberty etc.
It is bit like saying programming has the following commands, load, store, branch; but fails to tell you that you can do wonderful things like draw Mandelbrot pictures using these instructions.
You need to plan your group structure before you try to implement security, as it is hard to change once it is in place.
The big picture
You can set up a hierarchy of groups so the site RACF person can set up a group called MQ, and give the MQ team manager authority to this group.
The manager can
- define groups within it
- connect users to the group
- give other people authority to manage the group.
We can set up the following group structure
- MQM
- MQOPS – for the MQ operators
- MQOPSR for operators who are allow to issue only Read (display) commands
- MQOPSW for operators who can issue all command, display and update
- MQADMS – for the MQ administrators
- MQADMR – for MQ administrators who can only use display commands
- MQADMW – for MQ administrators who can use all commands
- MQWEB….
- MQOPS – for the MQ operators
You should place an operator’s userid in only one group MQOPSR or MQOPSW as these are used to control access. MQM, MQOPS, MQADMS, MQWEB are just used for administration.
You permit groups MQOPSR and MQOPSW to issue a display command, but only permit group MQOPSW to issue the SET command.
Setting up groups to make it easy to administer
A group needs an owner which administers the group. The owner can be a userid or a group.
A group has been set up called MQM, and my manager has been made the owner of it.
My manager has connected my userid PAICE to the MQM group with group special.
CONNECT PAICE GROUP(MQM) SPECIAL
I can define a new group MQOPS for example
ADDGROUP MQOPS SUPGROUP(MQM) OWNER(MQM) DATA(‘MQ operators’)
The SUPGROUP says it is part of the hierarchy under MQM. I can create the group under MQM because I am authorised, If I try to create a group with SUPGROUP(SYS1) this will fail because I am not authorised to SYS1.
The OWNER(MQM) says people in the group MQM with group special can administer this new group.
Because my userid (PAICE) has group special for MQM, I can now connect users to the new group, for example
CONNECT ADCDB GROUP(MQMD ) AUTHORITY(USE ).
I can create another group under MQMD called MQMX, and connect a userid to it.
ADDGROUP MQMX SUPGROUP(MQMD) OWNER(MQMD) DATA(‘MQ Bottom group’)
CONNECT ADCDE GROUP(MQMX ) AUTHORITY(USE )
My userid PAICE can administer this because of the OWNER() inheritance up to GROUP(MQM)
If I list the groups I get
LISTGRP MQM INFORMATION FOR GROUP MQM SUPERIOR GROUP=SYS1 OWNER=IBMUSER SUBGROUP(S)= MQM2 MQMD USER(S)= ACCESS= ACCESS COUNT= UNIVERSAL ACCESS= PAICE JOIN 000000 NONE CONNECT ATTRIBUTES=SPECIAL LISTGRP MQMD INFORMATION FOR GROUP MQMD SUPERIOR GROUP=MQM OWNER=MQM SUBGROUP(S)= MQMX USER(S)= ACCESS= ACCESS COUNT= UNIVERSAL ACCESS= ADCDB USE 000000 NONE CONNECT ATTRIBUTES=NONE LISTGRP MQMX INFORMATION FOR GROUP MQMX SUPERIOR GROUP=MQMD OWNER=MQMD NO SUBGROUPS USER(S)= ACCESS= ACCESS COUNT= UNIVERSAL ACCESS= ADCDE USE 000000 NONE CONNECT ATTRIBUTES=NONE
All SUPGROUP() does is to define the hierarchy as we can see from the LISTGRP. We can display the groups and draw up a picture of the hierarchy. You can use the LISTGRP command repeatedly, or use the DSMON program(EXEC PGM=ICHDSM00) and use option
USEROPT RACGRP to get a picture like
LEVEL GROUP 1 SYS1 (IBMUSER ) 2 | MQM (IBMUSER ) 3 | | MQMD 4 | | | MQMX 3 | | MQM2 (IBMUSER )
Using OWNER(group) instead of OWNER(userid)
- If you have OWNER(groupname) it is easy to administer the groups. When someone joins or leaves the department, you add or remove the userid from groupname. One change.
- If you have OWNER(userid), then you have to explicitly connect the userid to each group with group special. When there is a new person you have to add the userid to each group individually. When someone leaves the team you have to remove the persons userid from all of the groups. This could be a lot of work.
Delegation.
You could define an operator MQOP1 and give the userid group-special for group MQOPS. This userid (MQOP1) can be used to add or remove userids in the MQOPSR and MQOPSW groups.
Looking at the MQOPS groups we could have groups and connected userids
- MQM with MQ security userids PAICE, BOB having group-special
- MQOPS with the operations manager and deputy MQOP1, MQOP2 having group special
- MQOPSR with STUDENT1, STUDENT2 who are only allowed to issue display commands
- MQOPSW with PAICE, TONYH, CHARLIE
- MQADMS….
- MQOPS with the operations manager and deputy MQOP1, MQOP2 having group special
and similarly for the MQ administration eam.
Userid PAICE can connect userids to all groups. MOP1 can only connect userids to the MQOPSR and MQOPSW, and not connect to the MQ ADMIN groups.
You use groups MQOPSR and MQOPSW for accessing resources. Groups MQM and MQOPS have no authority to access a resource, they are just to make the administration easier.
You may also want to consider having a group for application development. The group called PAYRDEVT is under MQM, is owned by the manager of the payroll development team.
When the annual userid validation check is done, the development manager does the checks, and tells the security department it has been done.
Permissions
There is no inheritance of permissions. If a userid needs functions available to groups MQMD and MQMX, the user needs to be connected to both groups.
You only connect userids to groups, you cannot have groups within groups. There may be many groups of userids which are allowed to issue an MQ display command, but only one group who can issue the SET command.
Suggested MQ groups
You need to consider
- production and test environments
- resources shared by queue managers, queue managers with the same configurations in a sysplex which can share definitions
- queue managers as part of a Queue Sharing Group
- queue manages that need isolation and so may have common operations groups, but different administration and programming groups.
You might define
- Group MQPA for the queue manager super group. (MQ, Production system, A)
- Groups for MQWEB. The Web server roles are described here.
- Groups for controlling MQ, operations and administrations, read only or update
- Groups for who can connect via batch, CICS etc
- Groups for application usage, who can use which queues
Groups for MQWEB
For MQWEB the MQ documentation describes 4 roles: MQWebAdmin, MQWebAdminRO, MQWebUser, MFTWebAdmin; and there is console and REST access.
Each role should have its own group. The requests from “Admin” and “Read Only” run with the userid of the MQWEB started task. The request from “User” run with the signed on user’s authority.
You might set up groups
- MQPAWCO MQPA – MQWebAdminRO Console Read Only.
- MQPAWCU MQPA – MQWebUser Console User only. The request operates under the signed on userid authority.
- MQPAWCA MQPA – MQWebAdmin Console Admin.
- MQPAWRO MQPA – MQWebAdminRO REST Read Only.
- MQPAWRU MQPA – MQWebUser REST User only. The request operates under the signed on userid authority.
- MQPAWRA MQPA – MQWebAdmin REST Admin Only.
- MQPAWFA MQPA – MFTWebAdmin MFT REST Admin.
- MQPAWFO MQPA- MFTWebAdmin MFT REST Read Only.
I would expect most people to be in
- MQPAWCU MQPA – MQWebUser Console User only. The request operates under the signed on userid authority.
- MQPAWRU MQPA – MQWebUser REST User only. The request operates under the signed on userid authority.
so you can control who does what, and get reports on any violations etc. If people use the MQWEB ADMIN you do not know who tried to issue a command.
Groups for operations
The operations team may be managing multiple queue managers, so you may need groups
- PMQOPS for Production
- PMQOPSR
- PMQOPSW
- TMQOPS for Test
- PMQOPSR
- PMQOPSW
If some operators are permitted to manage only a subset of the queue managers you will need a group structure that can handle this, so have a special group XMQOPS for this.
- XMQOPS for the special queue manager
- XMQOPSR
- XMQOPSW
Groups for administration.
This will be similar to operations.
Groups for end users.
This is for people running work using MQ.
Usually there are checks to make sure a userid can connect to the queue manager, using the MQCONN resource. Some customers have a loose security set up, and rely on the CICS to check to see if the userid is allowed to use a CICS transaction, rather than if the userid is allowed to access a queue.