SG 248578
SG 248578
Bill White
Mike Riches
Elijah Swift
Jeroen Tiggelman
Scott Woolley
Tom Zeehandelaar
Redbooks
IBM Redbooks
May 2025
SG24-8578-00
Note: Before using this information and the product it supports, read the information in “Notices” on
page vii.
This edition applies to IBM z/OS 3.1 (product number 5650-ZOS) and IBM zSecure Admin 3.1.1 (product
number 5655-ABB).
Notices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
Trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
Now you can become a published author, too! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
Stay connected to IBM Redbooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
Chapter 2. IBM zSecure capabilities for IBM Resource Access Control Facility
administrators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1 IBM zSecure Admin for RACF administrators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 zSecure Access Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.1 Possible uses for zSecure Access Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.2 Access Monitor environment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 zSecure RACF-Offline. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.1 Testing the RACF database cleanup with RACF-Offline . . . . . . . . . . . . . . . . . . . 15
2.4 General preparation steps for the use cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4.1 Creating a RACF-Offline database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4.2 Starting a RACF-Offline session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4.3 Logging on to the RACF-Offline session. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.4 Resetting the RACF-Offline log data set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4.5 Starting and preparing your zSecure Admin session . . . . . . . . . . . . . . . . . . . . . . 20
2.5 Further access monitor capabilities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Contents v
vi IBM RACF Security Impact Forecasting by using IBM zSecure
Notices
This information was developed for products and services offered in the US. This material might be available
from IBM in other languages. However, you may be required to own a copy of the product or product version in
that language in order to access it.
IBM may not offer the products, services, or features discussed in this document in other countries. Consult
your local IBM representative for information on the products and services currently available in your area. Any
reference to an IBM product, program, or service is not intended to state or imply that only that IBM product,
program, or service may be used. Any functionally equivalent product, program, or service that does not
infringe any IBM intellectual property right may be used instead. However, it is the user’s responsibility to
evaluate and verify the operation of any non-IBM product, program, or service.
IBM may have patents or pending patent applications covering subject matter described in this document. The
furnishing of this document does not grant you any license to these patents. You can send license inquiries, in
writing, to:
IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US
This information could include technical inaccuracies or typographical errors. Changes are periodically made
to the information herein; these changes will be incorporated in new editions of the publication. IBM may make
improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time
without notice.
Any references in this information to non-IBM websites are provided for convenience only and do not in any
manner serve as an endorsement of those websites. The materials at those websites are not part of the
materials for this IBM product and use of those websites is at your own risk.
IBM may use or distribute any of the information you provide in any way it believes appropriate without
incurring any obligation to you.
The performance data and client examples cited are presented for illustrative purposes only. Actual
performance results may vary depending on specific configurations and operating conditions.
Information concerning non-IBM products was obtained from the suppliers of those products, their published
announcements or other publicly available sources. IBM has not tested those products and cannot confirm the
accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the
capabilities of non-IBM products should be addressed to the suppliers of those products.
Statements regarding IBM’s future direction or intent are subject to change or withdrawal without notice, and
represent goals and objectives only.
This information contains examples of data and reports used in daily business operations. To illustrate them
as completely as possible, the examples include the names of individuals, companies, brands, and products.
All of these names are fictitious and any similarity to actual people or business enterprises is entirely
coincidental.
COPYRIGHT LICENSE:
This information contains sample application programs in source language, which illustrate programming
techniques on various operating platforms. You may copy, modify, and distribute these sample programs in
any form without payment to IBM, for the purposes of developing, using, marketing or distributing application
programs conforming to the application programming interface for the operating platform for which the sample
programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore,
cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are
provided “AS IS”, without warranty of any kind. IBM shall not be liable for any damages arising out of your use
of the sample programs.
The following terms are trademarks or registered trademarks of International Business Machines Corporation,
and might also be trademarks or registered trademarks in other countries.
CICS® IBM Z® System z®
Db2® RACF® z/OS®
IBM® Redbooks®
IBM Security® Redbooks (logo) ®
The registered trademark Linux® is used pursuant to a sublicense from the Linux Foundation, the exclusive
licensee of Linus Torvalds, owner of the mark on a worldwide basis.
UNIX is a registered trademark of The Open Group in the United States and other countries.
Other company, product, or service names may be trademarks or service marks of others.
To guard against future cyberattacks efficiently, you should have a simple process to predict
the impact of changes that are made to your security definitions. Security impact forecasting
can provide a streamlined workflow in which historical data is captured automatically, and an
intuitive interface enables you to set up security adaptations in a way that they can be quickly
analyzed for effect and, when deemed correct, applied automatically.
In the context of IBM Resource Access Control Facility (RACF®), changes to existing access
control definitions can be done in a proactive way with confidence by using IBM zSecure
Admin. IBM zSecure Admin capabilities can help you assess and build stronger access
controls against cyberthreats, rather than just reacting to them after they happen.
This IBM Redbooks® publication explores the value of analytics for security impact
forecasting regarding RACF and IBM zSecure Admin (RACF-Offline and the Access Monitor
functions). Use cases, best practices, and step-by-step guidance with examples are provided.
This publication is for IT Managers and Security Architects who are responsible for the
technology that protects their assets, and the change management staff and security
administrators who are responsible for the safeguarding applications and data from
unauthorized access.
The reader is expected to have a basic understanding of IT security concepts and the
principle of least privilege in a zero trust framework.
Authors
This book was produced by a team of specialists from around the world working at
IBM Redbooks, Poughkeepsie Center.
Bill White is an IBM Redbooks Project Leader and Senior IT Infrastructure Specialist at
IBM Poughkeepsie, New York.
Mike Riches is a Senior Technical Support Specialist who is based in the United Kingdom.
He has 13 years of in-depth experience with mainframe security software, and worked with
and supported mainframe networking software before his current role. Mike has worked at
IBM® for nearly 23 years. His areas of expertise include IBM zSecure, IBM Z® Security and
Compliance Center, and IBM Security® Key Lifecycle Manager for IBM z/OS®. He knows
RACF, Access Control Facility 2 (ACF2), and Top Secret external security managers (ESMs).
He is an author of other IBM Redbooks publications about IBM z/OS Communications Server
and IBM Communication Controller for Linux on IBM System z®.
Jeroen Tiggelman is a Senior Software Engineer who is based in the Netherlands. He has
29 years of experience in developing zSecure, and has been the zSecure development
manager since 2001. Jeroen has been working for IBM since the company acquired Consul
Risk Management in 2007. He holds two masters degrees in discrete mathematics and
theoretical computer science from the University of Leiden. His areas of expertise include
zSecure, RACF, and security principles. Jeroen supervised the creation of the first zSecure
Alert User Reference Manual in 2003 and wrote the introduction sections to the zSecure
CARLa Auditing and Reporting Language (CARLa) Command Language.
Scott Woolley is a z/OS software engineer who is based in IBM Poughkeepsie in the US. He
was a member of the RACF development team for over 20 years, focusing on the areas of
security auditing, cryptography, digital certificates, and identity mapping. Scott performs
cybersecurity testing and analysis with the z/OS Secure Engineering team.
Hans Schoone
Chief Architect, IBM zSecure
Michael Zagorski
Program Director, IBM Z Security
Find out more about the residency program, browse the residency index, and apply online at:
ibm.com/redbooks/residencies.html
Comments welcome
Your comments are important to us!
We want our books to be as helpful as possible. Send us your comments about this book or
other IBM Redbooks publications in one of the following ways:
Use the online Contact us review Redbooks form found at:
ibm.com/redbooks
Send your comments in an email to:
redbooks@us.ibm.com
Mail your comments to:
IBM Corporation, IBM Redbooks
Dept. HYTD Mail Station P099
2455 South Road
Poughkeepsie, NY 12601-5400
Preface xi
xii IBM RACF Security Impact Forecasting by using IBM zSecure
1
Where in the past organizations trusts that the mainframe was safe, today there are more
compliance regulations that are in place to prove it. As a result, it is necessary to explain
clearly why particular people have access to resources.
Also, the security skills that are needed to manage the environment are unique, and finding
the right skilled personnel is a challenge.
At a minimum, the following tasks are essential for restricting access to only those users and
tasks that need it:
Obtaining relevant data representing all the required accesses
Summarizing and consolidating this data to keep analysis manageable
Provide security impact forecasting on the proposed security definition changes
For more information, see 2.2.2, “Access Monitor environment” on page 11 and 2.3.1,
“Testing the RACF database cleanup with RACF-Offline” on page 15.
In simple terms, a zero trust architecture is designed to trust nothing and no one until their
identity and authorization are confirmed. There are several core components to a zero trust
architecture that z/OS enforces on its own. The ideas of “continuous” and “strict”
authentication where the system regularly and for each request validates a user's access is
managed by the system itself, except for application-based settings like user authorization
caching, which are beyond the scope of this document.
Risks can further be mitigated by encrypting sensitive data: Even if someone can get at the
data store, they cannot use the data unless they also obtain the key to decrypt the data.
A security administrator takes a more active role in enforcing the ideas of least privilege and
“no implicit trust” as a part of a zero trust environment. No implicit trust means that, in the
overarching term of zero trust, no user or agent (like a started task or job) shall be assumed
to have access to the environment. You see in later chapters of this publication how to avoid
or minimize generic accesses and authorities that contradict this principle. Also, least
privilege means that accesses and authorities that are granted to users and agents are
strictly limited to the privileges that allow the user to perform their job. You also see in later
chapters some strategies to explicitly minimize privileges and eliminate authorities that go
unused to maintain a least privilege environment.
RBAC is an approach where access is never granted directly to a user, but rather to a
particular access control group that represents the job role that a user is assigned. If the user
moves to another job role, they can be removed from the role group, which helps ensure that
no individual user permissions continue to exist for a task that are no longer required.
Access monitoring is still required because it is also possible that a particular task is no longer
performed by a certain job role.
The SAF interface passes the request to a security package that contains the access rules.
This package might be RACF or another ESM.
1.3.2 RACF
A central part of RACF is the security database, which contains security rules that define the
identities and access to resources. The RACF term for a logical record in the database is
profile.
A user or group can be granted a certain access level to a data set or resource profile that
controls the protection of a set of resources. In RACF, access types are hierarchical, so
someone with the access level UPDATE also has the access level READ.
It is also possible to grant access to everyone. There are two types of this access:
Access that is granted to ID(*) requires that the identity of the requester is known.
Universal access (UACC) grants access to nonauthenticated tasks.
Furthermore, there is also a global access table (GAT) that can specify that a certain level of
access to a resource can be granted without consulting the database.
The overall system is flexible, but for managing security with confidence, it is a best practice
to establish groups for clear functional purposes, and minimize granting both global and
individual accesses.
When a new application or function must be established, they should be implemented in such
a way that no more access is granted than required.
For more information, see Chapter 3, “Adding a set of profiles” on page 27.
For more information, see Chapter 4, “Removing unused security definitions” on page 57.
For more information, see Chapter 5, “Converting generic and specific access to group-based
access” on page 85.
For more information, see Chapter 6, “Minimizing access control privileges” on page 129.
With Access Monitor, you can capture a full year's worth of access data and still use the data
for analysis. You have good confidence that you captured all accesses that normally occur.
(You must be aware of emergency measures that might have to be in place but are not
normally used.)
If you set up your adjusted security database by using RACF-Offline, you can run an analysis
to see what impact your proposed security changes have, which means that you can develop
confidence in the command stream that is being built to change your security environment.
The ACCESS and RACF_ACCESS report types that are used by the AM menu are part of the
CKRCARLA program, also known as the CARLa Auditing and Reporting Language (CARLa)
engine. You may do this analysis by using a batch job.
For more information about the IBM zSecure Admin (Access Monitor and RACF-Offline)
capabilities, see Chapter 2, “IBM zSecure capabilities for IBM Resource Access Control
Facility administrators” on page 7.
This chapter explains how specific IBM zSecure Admin capabilities can help build confidence
in making access control decisions and policy changes to IBM Resource Access Control
Facility (RACF). It also highlights the preparation steps that are needed to use those
capabilities.
zSecure Admin provides a layer on top of RACF and extends the functions so that users can
enter and process administrative commands quickly, generate custom reports, and clean up
security databases. zSecure Admin enables RACF administrators to identify and analyze
problems in RACF to prevent mistakes before they become a threat, which instills confidence
in RACF administrators. zSecure Admin also provides administrative authority in a granular
fashion so that users have only the specific amount that is required for their job.
In addition to increasing productivity and avoiding unintentional changes, zSecure Admin can
also act as a training aid for security administrators who are unfamiliar with RACF because
they can learn about administration from the RACF commands that zSecure Admin
generates.
The CKRCARLA program is used by many zSecure components to process data, including the
zSecure Access Monitor task C2PACMON. For more information about C2PACMON, see 2.2.2,
“Access Monitor environment” on page 11.
zSecure Admin has a comprehensive ISPF user interface (UI) with a breadth of RACF
administration functions (see Figure 2-2).
IBM zSecure Admin includes the following components that are the focus of this book:
Access Monitor, which can be used to collect and present information about actual usage
of RACF resource profiles.
RACF-Offline, which adds the ability to issue most RACF commands against an inactive
RACF database to independently test changes.
1
CARLa is a programming language where users generate audit reports and perform security administration tasks.
CARLa programming is not a skill that zSecure beginners are expected to perform. It is often seen as one of the
more advanced skills that seasoned zSecure users learn when using zSecure functions and features. Alternatively,
users can attend the 3-day IBM Security zSecure CARLa Audit and Reporting Language course to learn the
fundamentals of CARLa programming.
Chapter 2. IBM zSecure capabilities for IBM Resource Access Control Facility administrators 9
2.2 zSecure Access Monitor
zSecure Access Monitor was originally designed to provide the information that was required
to enable effective RACF database cleanup. However, the data that is collected to provide this
function also provides more usage capabilities that are described in 2.2.1, “Possible uses for
zSecure Access Monitor ” on page 10.
To achieve the primary goal of effective RACF database cleanup, you need complete access
to information, meaning that the data that is collected must represent all RACF access
request events. System Management Facilities (SMF) might be a possible data source, but it
is incomplete because RACF writes only SMF records where auditing events are enabled. It
is possible to enable auditing at the RACF class level, but then the SMF data is too large. The
data must also cover a suitable period, that is, the more data that is collected, the higher level
of confidence that you can have in making the right decision. There will also be many
duplicate access events over time, so the design of Access Monitor copes with that situation
by using a consolidation process. In summary, RACF access event data is collected by
Access Monitor in addition to, and not instead of, SMF records.
More recently, zSecure Access Monitor was enhanced to capture information about many
z/OS UNIX file system events. The information is captured at the full path level, and not at the
directory level. You can also use specific access events, such as RACF VERIFY (RACINIT), for
alerting through zSecure Alert, for example, alert 1122 when a site-defined sensitive user ID
logs on.
These functions are not described here. For more information, see the IBM zSecure
documentation.
RACF administrators and analysts can also use Access Monitor data to test resource profiles
and access rights by running simulations against a candidate RACF database. You can
prepare the candidate database by using zSecure Admin RACF-Offline or a database on
another z/OS system where you intend to host production processes.
Access restructure
The access event information that is collected over time enables you to restructure access
definitions with the goal of tightening security by helping ensure that you follow the security
principles of “least privilege” access and “zero trust”.
The access event data is collected by dynamically loaded RACF post-processing exits. The
exit code runs in the user address space where the RACF access requests occur. You do not
need to concern yourself with the management of these exits unless your maintenance levels
or release of zSecure change.
Chapter 2. IBM zSecure capabilities for IBM Resource Access Control Facility administrators 11
The Access Monitor started task, which by default is called C2PACMON, must be started on
each LPAR to record the RACF access event request data. C2PACMON dynamically loads the
required RACF post-processing exits when it starts and removes them when it stops. The
data that is collected by the RACF exits is written from in-memory buffer space by C2PACMON
by using the CKRCARLA program, which combines the collected records and writes them to an
LPAR-specific daily collection data set. Each type of access event is saved in a corresponding
access record, representing the access from a user to a resource. Once per day, the data
from the collection data set or datasets is automatically consolidated into a single,
LPAR-specific daily consolidation data set. The data set attributes for the daily collection and
daily consolidation datasets are configured during the implementation of Access Monitor.
You can use batch jobs to consolidate these daily consolidation datasets into weekly, monthly,
quarterly, or yearly summaries. Any of these datasets can be used as input to zSecure Admin
with an input dataset type of ACCESS. In consolidated ACCESS datasets, only one record of
information is stored per unique set of values. When the same user ID accesses the same
resource in the same class with the same access level 500 times on the same system, these
500 access events are stored as one record in the ACCESS dataset. This consolidated record
contains the timestamp of the last occurrence, system, user ID, resource, class name, access
level, and a counter that indicates that this access occurred 500 times. This Access Monitor
specific consolidation process is the reason why the size of ACCESS data sets is manageable.
Users process the consolidated access data by running ad hoc queries to evaluate the profile
usage and access data. You can set up and run processing interactively by using the options
that are available on the Access Monitor menu in the zSecure Admin UI. The access data is
processed by using CKRCARLA. Two CARLa report types are available for this purpose:
The ACCESS report type uses the Access Monitor records to report the collected events.
The RACF_ACCESS report type shows profiles in the RACF database and annotates these
profiles with usage data from the Access Monitor records.
Use menu option AM.1 to select and report historic access events from the allocated access
monitor records, as shown Figure 2-5 on page 13.
Output/run options
1 1. Summary by User ID
2. Summary by member class and profile
3. Summary by simulated authorization used
4. Summary by simulated groups used for access
_ Show configured fields _ Show simulated fields _ Timezone (U/L/H)
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 2-5 AM.1 menu option
In the “Output/run options” section, you can specify how you prefer the layout and content to
be produced. zSecure Admin supports four different summary layouts:
Summary by User ID
Produces an access overview of all historic access events and decisions that were
collected in the allocated access monitor records, which are summarized by the user ID
that was involved in the access decision. If “Show simulated fields” is also selected, the
detailed output includes a section that is titled “Current RACF database effect”, showing
the authority path as simulated from the allocated RACF database.
Summary by member class and profile
Produces an access overview of all historic access events and decisions that were
collected in the allocated access monitor records, which are summarized by resource
class and profiles. If “Show simulated fields” is also selected, the detailed output includes
a section that is titled “Current RACF database effect” that shows the authority path as
simulated from the allocated RACF database.
Chapter 2. IBM zSecure capabilities for IBM Resource Access Control Facility administrators 13
Summary by simulated authorization used
Produces an access overview of all historic access events and decisions that were
collected in the allocated access monitor records, which are summarized by the simulated
authority that allows or disallows that access based on the allocated RACF database
source. The access event records do not contain all the possible authority paths because
that information is not available from the RACF post-processing exits that are used by
Access Monitor to collect the data. This simulation summary determines the authority path
from the allocated RACF database and summarizes the output by the simulated
authorization method.
Summary by simulated groups used for access
Produces an access overview of all historic access events and decisions that were
collected in the allocated access monitor records, which are summarized by the group
connection that allow or disallow that access based on the allocated RACF database
source. The access event records do not contain the group connect information because
that information is not available from the RACF post-processing exits that are used by
Access Monitor to collect the data. This simulation summary determines the group
connects from the allocated RACF database and summarizes the output by the simulated
groups that are used for access.
The detailed examples of converting access that are shown in later chapters use different
summary options that are best suited to the individual use case.
Figure 2-6 shows an example of reporting on the summarized access for user ID CRMBMJ2
by using menu option AM.1.
You can use the Access Monitor menu options to generate commands to clean up unused
accesses or profiles from the RACF database. This process is described in more detail in
later chapters.
For more information about how to implement zSecure Access Monitor, see the zSecure
product documentation.
Using RACF-Offline, you can direct all RACF commands to an offline, or inactive, RACF
database. RACF access verifications are not affected and are still performed against the
system’s active primary RACF database. Thus, the RACF-Offline environment applies only to
RACF commands that are used to change the Offline RACF database's security definitions.
You can use the offline RACF database as an input selection within the zSecure Admin UI,
and zSecure Admin can generate the RACF commands that are required to make the
changes. Alternatively, RACF-Offline can run in a batch job to process the RACF commands
that are specified as input.
For more information about how to implement zSecure RACF-Offline, see the zSecure
documentation.
Figure 2-7 depicts a high-level overview of the components that make up the Access Monitor
and RACF-Offline testing environment.
Figure 2-7 Schematic overview of Access Monitor and RACF-Offline testing environment
Chapter 2. IBM zSecure capabilities for IBM Resource Access Control Facility administrators 15
To clean up unused definitions in the FACILITY class, complete the following steps:
1. Create a copy of the pertinent RACF database that is ready to be used for a RACF-Offline
session.
2. Start RACF-Offline with the appropriate parameters.
3. Start zSecure Admin and select an input set that contains ACCESS, CKFREEZE, and RACF
sources.
4. Analyze the profile and permit usage of the FACILITY class.
5. Generate and run commands to clean up unused FACILITY class profiles and permits.
6. End the RACF-Offline session.
7. Start a zSecure Admin session.
8. Use the Access Monitor compare option to analyze the effects of cleanup commands.
9. When all is OK, you can run the cleanup commands against the live RACF database.
If you must allocate a new data set for the RACF-Offline database, comment out DISP=SHR
and uncomment the dataset attribute lines that are shown as comments. Adjust the SPACE
specification if required. You can verify the space that the primary RACF database uses and
specify the same space allocation for your RACF-Offline database.
When you run cleanups regularly, it might be a best practice to schedule a periodic batch job
that creates a fresh copy of the primary RACF database in a time slot when the system is not
heavily used.
When RACF-Offline is installed, you can use the default options module that is named B8ROPT
to configure the default RACF-Offline database, log datasets, and SMF processing options.
You use the command B8RACF on the TSO ready prompt to activate RACF-Offline. Pressing
Enter starts the RACF-Offline session by using the options from the module B8ROPT as
configured (see Figure 2-9).
READY
b8racf
B8R100I B8RACF version 3.1.0
B8R274I RACF DB to be used is CRMB.T.RACF.OFFLINE
B8R268I LOG data set to be used is CRMB.T.RACF.OFFLINE.B8RLOG
B8R304I New SMF-ID:$B8R
B8R121I Completed processing B8ROPT options module
B8R200A Enter RACF Command or "END"
Figure 2-9 RACF-Offline started with the default configuration
The various B8RxxxI informational messages report the configured offline RACF database
name, the name of the log data set, and SMF-ID to use for the SMF records that are
generated during your RACF-Offline session. The purpose of the LOG data set is to collect
the RACF commands that you run during your RACF-Offline session. A different SMF-ID is
configured to distinguish SMF records that are written during your RACF-Offline session from
the SMF records of the ‘live’ system to avoid confusion between actual and RACF-Offline
triggered SMF records.
Chapter 2. IBM zSecure capabilities for IBM Resource Access Control Facility administrators 17
When you are satisfied with the predefined configuration, you can continue with the logon
command for RACF-Offline, which is described in 2.4.3, “Logging on to the RACF-Offline
session” on page 19.
Use the command that is shown in Figure 2-11 to allocate your prepared RACF-Offline
parameter member before you start a RACF-Offline session.
READY
alloc fi(b8rparm) da(‘crmb.t.zsecure.testlib(b8rparm)’)
READY
b8racf
B8R100I B8RACF version 3.1.0
B8R274I RACF DB to be used is CRMB.T.RACF.OFFLINE
B8R268I LOG data set to be used is CRMB.T.RACF.OFFLINE.B8RLOG
B8R304I New SMF-ID:$B8R
B8R121I Completed processing B8ROPT options module
RACFDB ‘CRMB.T.RACF.OFFLINE’
B8R274I RACF DB to be used is CRMB.T.RACF.OFFLINE
LOGDS ‘CRMB.T.RACF.OFFLINE.B8RLOG’
B8R268I LOG data set to be used is CRMB.T.RACF.OFFLINE.B8RLOG
B8R143I Completed processing B8RPARM file
B8R200A Enter RACF Command or “END”
Figure 2-11 Starting RACF-Offline with parameters that are configured in the B8RPARM member
After you start RACF-Offline, you can then specify the RACF-Offline parameters
interactively if the RACFDB and LOGDS that you specify are predefined for this purpose and
you have UPDATE access to them.
In general, it is a best practice that the RACF-Offline configuration that was prepared by
the system programmer matches your requirements. When you are satisfied with the
configuration of your RACF-Offline session, log on to your RACF-Offline session.
READY
b8racf
B8R100I B8RACF version 3.1.0
B8R274I RACF DB to be used is CRMB.T.RACF.OFFLINE
B8R268I LOG data set to be used is CRMB.T.RACF.OFFLINE.B8RLOG
B8R304I New SMF-ID:$B8R
B8R121I Completed processing B8ROPT options module
B8R200A Enter RACF Command or "END"
logon *
B8R251I CRMBTZ1 logged on
B8R200A Enter RACF Command or "END"
Figure 2-13 Logging on to RACF-Offline
That command logs you on with the same user ID that you already use. Optionally, if your
user ID is not assigned with the SPECIAL attribute, you can add the SPECIAL keyword to the
logon * command to assign the SPECIAL attribute to your user ID for the configured
RACF-Offline database.
Chapter 2. IBM zSecure capabilities for IBM Resource Access Control Facility administrators 19
2.4.4 Resetting the RACF-Offline log data set
Before running RACF commands in your RACF-Offline session, empty the associated log
data set to remove RACF commands from previous RACF-Offline sessions that are still
stored in the log data set (see Figure 2-14).
b8racflg reset
B8R277I RACF LOG file reset
B8R200A Enter RACF Command or "END"
Figure 2-14 Clearing the log data set that is configured in RACF-Offline
Run the command ispf and press Enter to start an ISPF session within your RACF-Offline
session. That command opens the regular ISPF Primary Option Menu (see Figure 2-15).
In all the examples in this book, we use the following confirmation options to help ensure that
commands run on the local system after confirmation. Select option SE.4 (Setup Confirm) to
verify that you use the same options (see Figure 2-16 on page 21).
To generate RACF cleanup commands for security definitions that are not used in access
decisions, allocate a RACF input source (primary, active backup, unload, or RACF copy), a
CKFREEZE data set of the target system, and an ACCESS data set with preferably 1 year of
historic consolidated access records.2
Select option SE.1 (Setup Input files) to define a new input set or select an already defined
input set to use during your zSecure session. If you are not familiar with the naming
convention of RACF, CKFREEZE, and ACCESS datasets on your system, consult a systems
programmer to retrieve this information before you can set up an appropriate input set.
Figure 2-17 shows what the content of your zSecure input set might look like.
Enter data set names and types. Type END or press F3 when complete.
Enter dsname with .* to get a list Type SAVE to save set, CANCEL to quit.
Valid line commands: E L I R D Type REFRESH to submit unload job.
This sample input set contains an offline RACF database, a CKFREEZE data set, and a
12-month rolling ACCESS data set. The ACCESS data set contains consolidated access records
of the last 12 months. For example, if today is October 25th, 2024, this ACCESS dataset
contains the collected and consolidated access records from September 2023 to September
2024.
2
When your RACF database is shared with more systems, allocate a CKFREEZE data set and an ACCESS data set of
each system that shares the RACF database that is targeted for the cleanup.
Chapter 2. IBM zSecure capabilities for IBM Resource Access Control Facility administrators 21
Important: When deciding about cleaning up unused definitions in your RACF database,
you must consider all processing activities, which include those activities that occur only
once a year, such as batch jobs that produce financial reports about last year's
performance. Thus, collecting and using historical access event data of at least 1 year
increases the confidence that your cleanup efforts do not disrupt access paths that are
infrequently used.
Select this input set to use in your zSecure session by entering S. The selected input set is
marked with label selected (see Figure 2-18).
Description Complex
_ Recent RACF, CKFREEZE, ACCESS datasets TVT6003 selected
_ Active primary RACF data base
_ Active primary RACF data base and live SMF datasets
_ Active backup RACF data base
_ Active backup RACF data base and live SMF datasets
_ Active backup ACF2 data base and live SMF datasets
_ Live settings
Figure 2-18 Selecting the input set to use for cleanup
For example, before you perform intelligent cleanup that is guided by Access Monitor data,
clicking zSecure Admin option AM.9 (Cleanup option 1) performs a scan of your RACF
database and generate commands to remove redundant permits for user IDs that already
have access through group connect. If you use option 2, you generate commands to remove
redundant dataset profiles.
After you remove the redundant definitions by using the static analysis, you can use Access
Monitor data to perform dynamic analysis based on real access usage.
Another example relates to zSecure Admin option AM.7 (Global usage) and AM.1 (Access)
with the selection option Use of global access checking table. With these reports, you can
check that access that is granted through the RACF Global Access Checking (GAC) table is
not excessive, and that only datasets and resources that are truly “public and must be
accessed frequently are defined to enable the performance gain from bypassing full access
checking.
The “Specify further selection criteria” section, which you can use to perform more filtering by
Jobname and Port Of Entry, is seen only when Show configured fields is also selected from
menu options AM.1 and AM.2. Jobname and Port Of Entry information is not collected by
default because it makes the consolidation of access records less effective, so configuring
C2PACMON to collect this data must be done selectively for specific purposes.
Chapter 2. IBM zSecure capabilities for IBM Resource Access Control Facility administrators 23
Figure 2-20 shows the “Current RACF DB selection” filtering options that are available when
you select Advanced selection criteria from menu options AM.1 and AM.2. By using these
options, you can select events based on the simulation of the event by using the current
RACF source.
ID_USER is selected, which produces a report showing where access was granted because a
user ID is permitted on the ACL of a profile protecting a resource. You can use this report as a
starting point to learn where in the journey to implement role-based access control (RBAC)
you are, and where you should grant access by group based on the user’s role.
zSecure Access Monitor can also help you identify user IDs that are not used for the period
that is covered by the access event data that is allocated as input. Menu option AM.V – ID
Verify reports the actual RACROUTE REQUEST=VERIFY (also known as RACINIT) events. By using
the “Further selection” criteria that are shown in Figure 2-21 on page 25, you see all the
RACF system special user IDs that are logged on.
User attributes(Y/N/blank)
/ User has special attribute _ User has operations attribute
_ User has (ro)auditor attribute
Figure 2-21 AM.V Further selection menu
You can check the resulting report against all user IDs that are defined with the system
special attribute by using menu option RA.U. Select Attributes for the Additional selection
criteria, and select Systemwide and group authorizations of Special.
After more verification, any user IDs in the RA.U report that were not used by the AM.V report
can potentially be removed.
These examples are a few that demonstrate some of the additional functions that are
available with zSecure Access Monitor. This chapter contains a few use cases that are
detailed in later chapters. When you become more familiar with the value proposition of
zSecure Admin, you discover more practical ways that you can benefit from using other
supported filters to fuel your potential future cleanup efforts. For more information,
see IBM zSecure documentation.
Chapter 2. IBM zSecure capabilities for IBM Resource Access Control Facility administrators 25
26 IBM RACF Security Impact Forecasting by using IBM zSecure
3
When applications or their features are left unsecured by RACF or other products, they might
hinge on defaults that allow for their use but do not process security checking or logging.
Such an implementation might allow for unintended and unsecured usage of subsystems,
applications, and resources through these default or generic permissions. Such a
configuration is not acceptable in a zero trust environment, where no user should be trusted
to access any resource or application feature by default. Also, any implementation of least
privilege should not allow users whose job role does not require the usage of an application
or its features to allow this access.
With zSecure Access Monitor, you can review historic access events to determine resources
or datasets that are not controlled by RACF profiles. Also, although Access Monitor can
automatically generate commands to create ACLs for new profiles based on historic access
to the resources, it is not the best approach because Access Monitor records bases such an
access list on individual user access attempts. It is more meaningful and secure for you to
review the users in this report and define accesses to them through either existing or new
groups that represent job roles. Lastly, with RACF-Offline through zSecure, you can validate
that your new definitions and ACLs do not introduce overly permissive or unexpected access
failures before applying them in your production environment.
After completing these steps, you can continue with the definition of resource profiles as
follows:
Analyzing statistics and discovering missing RACF resource profiles
Defining a RACF resource profile in the RACF-Offline database
Simulating Access Monitor data against the offline RACF database
Suppose that your auditors demand that access to all TSOAUTH resources must be controlled
by a RACF resource profile, and it is your job to implement the protection of the TSOAUTH
resources that are used in your company.
Class Description
TSOAUTH TSO user authorities such as OPER and MOUNT
You see Yes for the Protection active option, which means that protection of access to
resources in the TSOAUTH class is active on this system. Press F8 to scroll down to find the
configured default return code for the TSOAUTH class (see Figure 3-2 on page 31).
The default return code for resource class TSOAUTH in the CDT is 4, as reported by option
Default not-found RC, which means that when RACF does not find a matching resource
profile for a TSOAUTH resource that a user tries to access, RACF provides return code 4. This
return code means that RACF cannot make an access decision based on a resource profile
and leaves the decision whether access is allowed or denied to the requesting resource
manager (RM), such as z/OS, TSO, IMS, IBM CICS®, IBM Db2®, or others. Most RMs allow
access when the external security manager (ESM) RACF, Access Control Facility 2 (ACF2),
or TSS does not restrict access.
To verify whether any users can access TSOAUTH resources through this default return code,
use the historic access decisions that Access Monitor collected.
On the next menu, specify to report all historical access events that are related to the TSOAUTH
resource class. To use more granular selection filters for historical access events, select the
option Current RACF Database Selection. To report which users accessed TSOAUTH
resources, select a summary based on a member class and profile (see Figure 3-4).
Output/run options
2 1. Summary by user ID
2. Summary by member class and profile
3. Summary by simulated authorization used
4. Summary by simulated groups used for access
Press Enter to produce the summary of access events where RACF returns the default return
code for TSOAUTH class resources as defined in the CDT (see Figure 3-6).
After reviewing the outcome of the access simulation of historic access events, you decide to
define a resource profile that is named “MOUNT” in the resource class TSOAUTH. Access to the
MOUNT resource allows TSO/E users to issue dynamic allocation requests for datasets, which
result in the need for volume mounting. Next, you can simulate the security impact of adding
the profile MOUNT by using your RACF-Offline database before defining the MOUNT profile in the
TSOAUTH class of your active RACF database.
Analyzing the historic access events, you discovered that most reported users are either
systems programmers or automation task users. You do not want to permit access to the
TSOAUTH class MOUNT resource to individual users because your company is implementing
role-based access control (RBAC). You know that all systems programmers are connected to
role-base group SYSPROG and automation task users are members of role-based group SYS1,
so you decide to permit READ access to these groups. In a real-life scenario, it might be
impossible to find an existing role-based group that represents a specific job role. If so, you
might want to consider introducing a role-based group that allows efficient access
management to this resource and potentially other sensitive z/OS resources.
To run the appropriate RACF commands to create the TSOAUTH class resource profile MOUNT
and define ACL entries based on the results of your security assessment of historical access
events for the TSOAUTH class MOUNT resource, select the option RA.R (RACF Administration -
General resource profiles) from the zSecure Admin Main menu (see Figure 3-8), and press
Enter.
Output/run options
_ Show segments _ All _ Enable full ACL _ Specify scope
_ Show differences _ Summarize by class
_ Print format Customize title Send as email
Background run Full detail form Sort differently Narrow print
Print ACL Resolve to users Incl operations Print names
Figure 3-8 Selecting the profiles that are defined in the TSOAUTH class
In the next panel (see Figure 3-10), specify that you want to copy the TSOAUTH profile PARMLIB
to the TSOAUTH profile MOUNT. Use option 1 (Create permanent profile) and suboption 1 (Copy
segments and members), and press Enter.
profile . . . . . . MOUNT______________________________________
_____________________________________________________________________
_____________________________________________________________________
________________________________________________________________
Queued in CKRCMD
zSecure Admin General resource overview
Command ===> _________________________________________________ Scroll===> CSR_
Class TSOAUTH 16 Dec 2024 14:41
Class Profile key T UACC Owner S/F W
__ TSOAUTH ACCT READ SYSAUTH_ R R _
__ TSOAUTH CONSOLE NONE SYSAUTH_ R R _
__ TSOAUTH JCL READ SYSAUTH_ R R _
__ TSOAUTH OPER READ SYSAUTH_ R R _
__ TSOAUTH PARMLIB NONE SYSAUTH_ R R _
__ TSOAUTH RECOVER READ SYSAUTH_ R R _
******************************* Bottom of Data ********************************
Figure 3-11 Generating the commands to copy the TSOAUTH profile PARMLIB in the CKRCMD work
dataset
The message Queued in CKRCMD in the upper right of the panel informs you that the RACF
commands are generated in the CKRCMD work dataset. Press F3 to exit this panel and access
the work dataset with the generated RACF commands (see Figure 3-12).
When you are satisfied with the RACF commands to define the TSOAUTH class profile MOUNT,
either specify GO to run the generated commands or press F3 to return to the zSecure Admin
Results menu. Specify R (see Figure 3-14) and press Enter to run the commands.
Optionally, you can press F8 to scroll down to the comment box that reports the All commands
completed successfully message.
The TSOAUTH class profile MOUNT was successfully added to your offline RACF database.
3.4.3 Simulating Access Monitor data against the offline RACF database
In this section, you learn how to conduct a simulation of Access Monitor data against the
offline RACF database.
After you run the RACF commands to define the TSOAUTH class MOUNT profile against your
offline RACF database, you can verify the correct addition of this new resource profile.
Output/run options
_ Show segments _ All _ Enable full ACL _ Specify scope
_ Show differences _ Summarize by class
_ Print format Customize title Send as email
Background run Full detail form Sort differently Narrow print
Print ACL Resolve to users Incl operations Print names
Figure 3-16 Using the option RA.R to list the details of the resource profile MOUNT in the TSOAUTH
class
After selecting the RACF class TSOAUTH and profile MOUNT, press Enter to list the profile (see
Figure 3-17).
Specify S before the TSOAUTH MOUNT profile and press Enter to review the correct definition of
the resource profile and all its settings (see Figure 3-18 on page 41).
_ Identification TVT6003
Class TSOAUTH
Profile name MOUNT
Type
Volume serial list
_ Owner SYSAUTH_ AUTHORIZATION GRO
Installation data _______________________________________________
Application data _______________________________________________
As you can see, the profile is correctly added and shows the intended role-based groups
SYSPROG and SYS1 with READ access on the ACL.
Output/run options
1 1. Summary by user ID
2. Summary by member class and profile
3. Summary by simulated authorization used
4. Summary by simulated groups used for access
_ Show configured fields / Show simulated fields _ Timezone (U/L/H)
_ Print format Customize title Send as email
Background run Full page form
Figure 3-19 Simulating access to the TSOAUTH class resource MOUNT against the RACF-Offline
database
You can simulate access decisions that result from the new TSOAUTH class MOUNT profile by
using option AM.2 from the zSecure Admin Access menu. You can use similar filtering criteria
as in Figure 3-19 except you do not report authority by using DFLTRC (see Figure 3-20 on
page 43).
Output/run options
1 1. Summarize by user ID 2. Summarize by member class and profile
_ Show configured fields _ Timezone (U/L/H)
_ Print format Customize title Send as email
Background run Full page form
Figure 3-20 Reviewing access decisions for the TSOAUTH class resource MOUNT through the
compare function
As shown in Figure 3-21, the access simulation results are divided into three separate
reports:
The report SIMSAMED shows access simulation results where the simulated access
decisions are the same as the historic access decision.
The report SIMLESSD shows access simulation results where the simulated access
decisions allow less access than the historic access decision.
The report SIMMORED shows access simulation results where the simulated access
decisions allow more access than the historic access decision.
The report SIMSAMED is expected to report 0 records for the simulation of the TSOAUTH class
resource MOUNT. Because you added the TSOAUTH class profile MOUNT, the simulated historic
access events no longer result in a default return code of 4. This outcome proves that your
profile successfully protected the TSOAUTH class resource MOUNT.
To access the simulation details for user CRMBAH1, specify S again and press Enter (see
Figure 3-23).
Line 1 of 2
ACCESS summary simulated access is less
Command ===> _________________________________________________ Scroll===> CSR
Access monitor records for Classes like TSOAUTH 17 Dec 2024 09:40
Occurrence Userid Name First occurrence Last occur
23 CRMBAH1 SYSPROG1 AH 5Jun2024 13:53 12Sep2024
Occurrence Intent Type RetAll AccRC SimRC
23 READ Auth 4 8
Occurrence Class
23 TSOAUTH
Occurrence Resource Profile key us
23 MOUNT
Occurrence Complex Syst RGPJCAVP GUGSOPGXO SOA PCSL First occurrenc Last oc
23 TVT6003 ZS34 S A 5Jun2024 13:53 12Sep20
Occurrence Timestamp
__ 1 5Jun2024 13:53
__ 22 12Sep2024 20:02
******************************* Bottom of Data ********************************
Figure 3-23 Simulated access decisions for user CRMBAH1 to the TSOAUTH class resource MOUNT
The report SIMMORED contains records, as shown in Figure 3-24. The reason why report
SIMMORED contains records where the simulated access results allow “more” or “higher”
access than the historic access decision from the access records is because you permitted
these users to be on the access list of the TSOAUTH class MOUNT profile.
Line 1 of 21
ACCESS summary simulated access is more
Command ===> _________________________________________________ Scroll===> CSR_
Access monitor records for Classes like TSOAUTH 17 Dec 2024 09:40
Occurrence Userid Name First occurrenc Last occur
S_ 749543 AXRUSER 23Jun2024 11:51 2Nov2024
__ 333 CRMAUTO ZTEAM AUTOTASKS 22Jun2024 23:10 2Nov2024
__ 1 CRMBAB1 SYSPROG1 AB 1Dec2023 22:32 1Dec2023
__ 2 CRMBAH6 SYSPROG VK 12Sep2024 20:12 12Sep2024
__ 4 CRMBFN1 SYSPROG FN1 7May2024 14:09 7May2024
__ 4 CRMBFN2 SYSPROG FN2 7May2024 14:09 7May2024
__ 1 CRMBGUS SYSPROG GUS 6Mar2024 09:21 6Mar2024
__ 40 CRMBJK1 SYSPROG1 JK 19Apr2024 07:25 31Oct2024
__ 8 CRMBLU1 SYSPROG1 LU 16May2024 13:12 16May2024
__ 3 CRMBMC1 SYSPROG1 MC 20May2024 06:40 20May2024
__ 2 CRMBMJ1 SYSPROG1 MJ 7Dec2023 09:35 7Dec2023
__ 18 CRMBMK1 SYSPROG1 MK 30Oct2024 16:07 30Oct2024
__ 1 CRMBPH1 SYSPROG1 PH 7Mar2024 10:22 7Mar2024
__ 3 CRMBRL1 SYSPROG1 RL 15Dec2023 13:54 11Sep2024
__ 5 CRMBRS1 SYSPROG1 RS 20Jun2024 11:06 11Sep2024
__ 2 CRMBRT1 SYSPROG1 RT 30Apr2024 09:56 30Apr2024
__ 23 CRMBTZ1 SYSPROG1 TZ 1Nov2024 16:02 1Nov2024
__ 77 CRMBVK1 SYSPROG1 VK 16Jan2024 15:55 1Nov2024
__ 6 CRMBVK2 SYSPROG2 VK 1Aug2024 12:36 1Aug2024
Figure 3-24 Reviewing users that are permitted access to the TSOAUTH class resource MOUNT
Line 1 of 2
ACCESS summary simulated access is more
Command ===> _________________________________________________ Scroll===> CSR
Access monitor records for Classes like TSOAUTH 17 Dec 2024 09:40
Occurrence Userid Name First occurrenc Last occur
749543 AXRUSER 23Jun2024 11:51 2Nov2024
Occurrence Intent Type RetAll AccRC SimRC
749543 READ Auth 4 0
Occurrence Class
749543 TSOAUTH
Occurrence Resource Profile key us
749543 MOUNT
Occurrence Complex Syst RGPJCAVP GUGSOPGXO SOA PCSL First occurrenc Last oc
749543 TVT6003 ZS34 23Jun2024 11:51 2Nov20
Occurrence Timestamp
S 8824 23Jun2024 11:51
__ 740719 2Nov2024 22:58
******************************* Bottom of Data ********************************
Figure 3-25 Reviewing the user AXRUSER that is permitted access to the TSOAUTH class resource
MOUNT
The column “SimRC” reports that the simulated RC is 0 from the allocated RACF database
(the offline RACF database), meaning that the user is authorized to READ this resource.
Column “AccRC” reports a historic access result of RC=4, so adding the TSOAUTH class profile
MOUNT authorizes this user to access the TSOAUTH MOUNT resource with READ access when you
define the same profile in the active RACF database.
Line 1 of 47
ACCESS summary simulated access is more
Command ===> _________________________________________________ Scroll===> CSR_
Access monitor records for Classes like TSOAUTH 17 Dec 2024 09:40
Access summary
_ Security complex name TVT6003
_ RACF user ID AXRUSER
Access intent READ
Record type Auth
System name ZS34
SAF resource class TSOAUTH
SAF resource name MOUNT
Timestamp of last occurrence 23Jun2024 11:51
Access count 8824
Line 30 of 47
ACCESS summary simulated access is more
Command ===> _________________________________________________ Scroll===> CSR_
Access monitor records for Classes like TSOAUTH 17 Dec 2024 09:40
The simulation access event details are shown in the section Current RACF database effect
at the bottom of your display. From this section, you conclude that user AXRUSER is allowed
READ access to the TSOAUTH class profile MOUNT that is granted to a group, as indicated by the
ID_GROUP in the field Authority used in current DB.
When you are satisfied with the outcome of your access simulation, end your RACF-Offline
session and define the TSOAUTH class profile MOUNT to the active RACF database.
Press F3 several times until you reach the ISPF Primary Option Menu. Specify option X to
leave ISPF and return to your RACF-Offline session (see Figure 3-28 on page 49).
Specify what you want to do with your ISPF Log Data Set. Press Enter to return to the
RACF-Offline session (see Figure 3-29).
You are now in TSO READY mode. Next, specify ISPF here once more and press Enter. You
return to the ISPF Primary Option Menu again, but you are no longer in a RACF-Offline
session.
Start zSecure Admin by using your regular method. You can continue to use the same
zSecure Admin input set that you used during your RACF-Offline session. Any RACF
commands that you run are against the production RACF database because you are no
longer inside a RACF-Offline session (see Figure 3-31).
Enter dataset names and types. Type END or press F3 when complete.
Enter dsname with .* to get a list Type SAVE to save set, CANCEL to quit.
Valid line commands: E L I R D Type REFRESH to submit unload job.
Because you still use your RACF-Offline database as input to this zSecure Admin session,
you can define the TSOAUTH class profile MOUNT by copying it from your offline RACF database.
Select the option RA.R (RACF Administration General resource profiles) from the zSecure
Admin Main menu and press Enter (see Figure 3-32 on page 51).
Output/run options
_ Show segments _ All _ Enable full ACL _ Specify scope
_ Show differences _ Summarize by class
_ Print format Customize title Send as email
Background run Full detail form Sort differently Narrow print
Print ACL Resolve to users Incl operations Print names
Figure 3-32 Using the option RA.R to list details of the resource profile MOUNT in the TSOAUTH class
Specify the class name TSOAUTH and resource profile MOUNT, and press Enter to list the profile
(see Figure 3-33).
Because the TSOAUTH class profile MOUNT does not yet exist in the active RACF database, you
do not have to adjust the “To class” and “profile” specifications (see Figure 3-35). You can
continue by pressing Enter to generate the commands.
Queued in CKRCMD
zSecure Admin General resource overview
Command ===> _________________________________________________ Scroll===> CSR_
Class TSOAUTH, like mount 17 Dec 2024 14:36
Class Profile key T UACC Owner S/F W
__ TSOAUTH MOUNT NONE SYSAUTH R _
******************************* Bottom of Data ********************************
Figure 3-35 Commands to copy the TSOAUTH profile MOUNT that is queued in the CKRCMD work
dataset
The message Queued in CKRCMD in the upper right of your panel states that the RACF
commands were successfully generated in the CKRCMD work dataset. Press F3 to leave your
panel and access the generated RACF commands in the CKRCMD work dataset (see
Figure 3-36 on page 53).
Either specify GO to run the generated commands or press F3 to return to the zSecure Admin
Results menu. As indicated by the message in the upper right of your panel, you can specify
R (see Figure 3-37) and press Enter to run the commands.
Optionally, you can press F8 to scroll down to the comment box that reports the message All
commands completed successfully, as shown in Figure 3-39 on page 55.
The TSOAUTH class profile MOUNT was successfully added to your active RACF database. Your
auditors now control access to the TSOAUTH class resource MOUNT.
This step concludes the walk-through to add the TSOAUTH class profile MOUNT to control access
to this z/OS sensitive resource. Alternatively, you can use the same or a similar scenario to
perform the following tasks:
Add another resource profile for the TSOAUTH class resource CONOPER that is accessed
through the authority DFLTRC (see Figure 3-6 on page 33).
Report general resources in other general resource classes that were accessed through
authority DFLTRC and define appropriate resource profiles for these resources.
When you have not set SETROPTS PROTECTALL(FAIL), you can report which datasets are
accessed through the authority UNPROT. Access simulation against the RACF database
returns UNPROT when no best matching dataset profile is found to control access to this
dataset. You can use this same scenario to set up dataset profiles to protect these
datasets.
Some general reasons why a RACF database can become unstructured and not meet
specified standards are as follows:
RACF security administrators are often requested by business process owners to create
certain RACF user, group, data set, or general resource profiles. However, when these
profiles are no longer required, the security definitions are often not removed from RACF.
Resource names are changed to adhere to a new naming convention standard, but the
resource profiles that refer to the former resource names are not deleted.
Security administrators are not informed when staff members leave the company, so their
user IDs remain defined in the RACF database.
Business processes or applications that were used in the past are changed, stopped, or
superseded by other processes, tools, or applications. The required RACF security
definitions to support the new or changed implementations are added to RACF, but the old
definitions are not removed.
This document does not specify a frequency for some of these checks because every
environment is different. Depending on your business requirements and the frequency that
certain applications or workloads run, you may want to deviate from these practices to some
degree.
Leaving inactive user IDs in your RACF environment is incompatible with a least-privilege
environment where only the user IDs that are necessary should exist and have privileges.
Therefore, keeping defined user IDs current is an important aspect of maintaining such an
environment.
Another concern that involves the maintenance of user and group profiles in a RACF
environment is managing users with multiple differing job roles or groups. Unfortunately,
users are not always removed from role-based groups that no longer align with their current
job role. To help monitor this situation, review the groups and roles that a user uses to keep
these group connections and permissions current. Groups that represent different job roles
can be “incompatible” or even “toxic” with another job role. Users that are connected to
incompatible or toxic groups might indicate that a change in job role or function for this user
occurred that was not adequately administered in RACF.
RACF provides a useful option in the case where an administrator might not want to
disconnect the group connection immediately. The CONNECT command contains a REVOKE
option that enables an administrator to prevent a user from using a group connection to
access resources while maintaining the existence of this connection. This REVOKE option for a
connection enables an administrator to restore these permissions if this change is meant to
be temporary, or to remove them after a job role change is validated.
A traditional method that is available for determining whether RACF definitions are used for
access requests is to log all successful accesses to all resources to System Management
Facilities (SMF). But, this solution is not feasible because of the sheer amount of SMF records
that this implementation produces, and the required CPU time and storage.
Using zSecure Access Monitor, you can analyze and report the usage of profiles, group
connections, and permissions. Optionally, zSecure Admin can generate the RACF commands
to delete profiles, connections, or permissions that have not been used for a prolonged
period, for example, over a year. Also, with RACF-Offline, you can validate that removing any
such profile, connection, or permission would not have a negative system impact based on
the captured data.
In zSecure Admin, you can use option AM.8 (Remove) to automatically generate RACF
commands to clean up profiles, permits, or connections that were not used during the last
year according to Access Monitor.
To remove unused resource profiles, select option 1 and press Enter (see Figure 4-1).
Note: You can customize the name of the automatically generated recovery command file.
The commands in this recovery command file can be used to restore profiles that are
cleaned up if you must rebuild the profile in its original state.
Output options
_ Background run
Figure 4-2 Specifying a class name to restrict your cleanup to a resource class
After pressing Enter, the “Further selection” panel opens (see Figure 4-3). To prevent the
deletion of recently added SURROGAT profiles, for example, during the last 2 weeks, specify
today-14 for the option Until, which verifies the profile creation date.
Press Enter to produce the automatically generated cleanup commands for unused profiles in
the SURROGAT class (see Figure 4-4 on page 63).
Specify S to review the generated SURROGAT class cleanup commands and press Enter (see
Figure 4-5).
zSecure Admin analyzes the allocated ACCESS data set to find SURROGAT class profiles for
which no access decisions are found and then generates an RDELETE command for all
SURROGAT profiles that were not used in any access decision during the past year.
Note: The profile creation date is reported as an “eye catcher” between CARLa Auditing
and Reporting Language (CARLa) comment signs (/*… */). When you run the RDELETE
commands, the commented sections are ignored.
zSecure Admin cannot account for these company-specific security policies and
implementations. Therefore, use your company knowledge and experience to prevent the
automatic deletion of profiles that must not be deleted.
As shown in the =NOTE= lines at the top of Figure 4-5 on page 63, you can run the commands
GO or RUN in the CLI to interactively run the cleanup commands. Alternatively, you can run the
commands SUB or SUBMIT to submit a batch job to run the cleanup commands in the
background. If so, you access the zSecure Submit menu (see Figure 4-6).
When you access the zSecure Admin Submit menu for the first time, the “Job statement
information” field might not be populated. If so, specify a job card that is valid on your
installation. You can select the options 1 (View JCL) or 2 (Edit JCL) to access the JCL of the
batch job before submitting the job with option 3 (Submit JCL) for running commands.
If one of the cleanup commands failed, the message Command failed shows up in the upper
right of your panel. If so, a reference to the record number of the commands that failed is
reported at the bottom of the CKRTSPRT work data set. Specify the command M (Maximum) in
the CLI, and press F8 to scroll to the bottom of the output (see Figure 4-9 on page 67).
As expected, all cleanup commands ran successfully. Pressing F3 returns you to the results
panel.
The RECOVERY dataset contains more lines than the cleanup data set (as reported in the
#Lines column) (see Figure 4-10). There is a higher number of lines in the RECOVERY data set
because rebuilding a deleted profile requires multiple commands to redefine the resource
profile and populate the access control list (ACL) and conditional ACL (CACL) with their
original permissions. You can use the commands S, V, B, or E to review or edit the RACF
commands to recover the SURROGAT profiles that you deleted from the offline RACF database.
These SURROGAT profiles still exist in the primary RACF database at this stage.
The purpose of these RECOVERY commands is that they can quickly restore profiles when the
cleanup causes security issues. As a best practice when running cleanup commands against
the primary RACF database, save these RECOVERY commands to a permanent data set and
put that data set in quarantine for a period, for example, 3 - 12 months after the cleanup. This
approach enables you to restore the original SURROGAT profile if necessary. Press F3 to return
to the results panel.
Pressing Enter shows the panel where you specify the data set or PDS in which you want to
save the recovery commands, which in this example are commands for the deleted SURROGAT
class profiles (see Figure 4-13).
Write the zSecure Admin+Audit for RACF message file to the following dataset:
Data set name . . . . . 'CRMB.T.RACF.RECOVERY.COMMANDS'_____________
Member . . . . . . . . SURROGAT
Disposition . . . . . . 2 1. Append 2. Overwrite 3. Generate
Optionally, to access the saved recovery commands at the specified location, specify Y at the
option Go into Edit (see Figure 4-14 on page 71).
If you must rebuild a SURROGAT profile in the future, run only the relevant redefine and permit
commands to restore the SURROGAT profile that you intend to restore. However, at this stage
you might not know whether this cleanup action might have a security impact. Press F3
several times until you reach the zSecure Admin RACF Access Monitor panel.
4.4.4 Reporting the potential security impact of deleted unused RACF profiles
This section describes how to report the potential security impact of the deletion of unused
profiles.
The SURROGAT profiles that Access Monitor indicated were not used during the last year were
successfully deleted from the offline RACF database that you allocated as input. Next, you
can use the Compare function, which uses the identical access data set that you used for the
cleanup as input, and then simulates all recorded access events from last year against the
allocated RACF input source. Your session uses the offline RACF database that no longer
contains unused SURROGAT class profiles. The return code (SimRC) of each simulated access
event is compared to the historic return code (AccRC) of the event.
On the Compare panel, specify that you want to restrict the Compare function to the SURROGAT
class by entering surrogat for the option SAF resource class.
Because you want to forecast the possible security impact of your cleanup commands, use
the filters in the “Comparison selection” section of this panel to omit occurrences where the
historic AccRC is the same as the simulated SimRC. By removing the / in the Simulated
results line before the option Same, your generated report includes only results where the
historic and simulated return codes are not the same. That result might indicate that your
cleanup commands impact security because users have less or more access than before
your cleanup of the unused SURROGAT profiles. Optionally, you can also specify 2 in the
“Output/run options” section to summarize by resource rather than by user ID (see
Figure 4-16 on page 73).
Output/run options
2 1. Summarize by userid 2. Summarize by member class and profile
_ Show configured fields _ Timezone (U/L/H)
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 4-16 Reporting access events where historic and simulated access have a different return code
The 0 records statistic that shows for the report SIMLESSD indicates that the cleanup
commands for the SURROGAT profiles do not impact security. All users that accessed SURROGAT
resources during the last year still have the same access after the cleanup of the unused
SURROGAT profiles.
However, when you look at the report SIMMORED, it shows one record where the simulated
access decision enables more access at the time of the event.
Line 1 of 1
ACCESS summary simulated access is more
Command ===> _________________________________________________ Scroll===> CSR_
Access monitor records for Classes like SURROGA 5 Nov 2024 11:34
Occurrence Class First occurrenc Last occurrence
1 SURROGAT 12Mar2024 19:42 12Mar2024 19:42
Occurrence Profile key used
1 CRMBAH2.SUBMIT
Occurrence Intent Type RetAll AccRC SimRC
1 ALTER Auth 8 4
Occurrence Resource
1 CRMBAH2.SUBMIT
Occurrence Userid Name
1 CRMBAH2 SYSPROG2 AH
Occurrence Complex Syst RGPJCAVP GUGSOPGXO SOA PCSL First occurrenc Last oc
1 TVT6003 ZS34 C 12Mar2024 19:42 12Mar20
Occurrence Timestamp
S 1 12Mar2024 19:42
******************************* Bottom of Data ********************************
Figure 4-18 Simulated access decision enables more access than the historic access decision
This SIMMORED report shows one occurrence where the RC at the time of the event was 8, as
reported in the column AccRC, and the simulated access RC, shown in column SimRC, is 4.
This SimRC 4 value indicates that no profile was found in the allocated RACF database that
protects the SURROGAT class resource CRMBAH2.SUBMIT.
Specify S in the last line and press Enter to access the details of the access record (see
Figure 4-19 on page 75).
Access summary
_ Security complex name TVT6003
_ RACF userid CRMBAH2 SYSPROG2 AH
Access intent ALTER
Record type Auth
System name ZS34
SAF resource class SURROGAT
_ SAF resource name CRMBAH2.SUBMIT
Timestamp of last occurrence 12Mar2024 19:42
Access count 1
Hover your cursor over the field Command or Yes, and press F1 to access the field-sensitive
help information for this request flag (see Figure 4-20).
This flag field (YES/NO) indicates whether the event occurred as the
result of a RACF command. This can be because the command flag was set on
the RACROUTE macro, or because the data collector found an active RACF
command.
The help information explains that the occurrence comes from a RACF command that was
run by user CRMBAH2.
Output/run options
1 1. Summarize by userid 2. Summarize by member class and profile
_ Show configured fields _ Timezone (U/L/H)
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 4-21 Rerunning the Compare function with additional selection filters
After pressing Enter, the “Further selection” panel opens. Specify N (No) to suppress access
events from your reports that occurred as a result of a RACF command that was issued (see
Figure 4-22 on page 77).
Press Enter to generate the compare reports again (see Figure 4-23).
This result indicates that the cleanup of the SURROGAT profiles does not have a negative or
positive security impact if the same access events that occurred last year for SURROGAT
resources occur today against the cleaned RACF-Offline database.
This result does not mean that there is a 100% certainty that this cleanup does not have any
security impact when you run it against the active primary RACF database. For example,
historic SURROGAT access events occurring more than 1 year ago might still produce a violation
when certain SURROGAT class profiles are no longer defined. But at minimum, you can feel
confident that your cleanup does not result in major incidents that cause important jobs to fail,
such as started tasks failing or running with reduced authorization, or subsystems or
applications that no longer function as expected.
Sometimes, you might find occurrences in the SIMLESSD or SIMMORED reports that are related
to profiles that you deleted. If for whatever reason you cannot explain the issue, you can
always decide not to delete the involved resource profile by removing the corresponding
commands from the cleanup commands data set before running the commands.
When you are satisfied with the outcome of the Compare reports, after analyzing and
resolving the reported issues, end your RACF-Offline session and run the cleanup against the
active primary RACF database.
Press F3 several times until you reach the ISPF Primary Option Menu. Specify option X to
leave ISPF and return to RACF-Offline (see Figure 4-24).
Specify what you want to do with your ISPF Log Data Set. Press Enter to reach the READY
mode (see Figure 4-25 on page 79).
When you return to the RACF-Offline interface, specify end and press Enter to exit your
RACF-Offline session (see Figure 4-26).
You are back in TSO READY mode. Specify ISPF and press Enter. You return to the ISPF
Primary Option Menu again, but you are no longer in a RACF-Offline session.
4.4.5 Cleaning up unused profiles from the active primary RACF database
This section describes how to clean up unused profiles from the active primary RACF
database.
Run the cleanup of the unused SURROGAT profiles against the active primary RACF database.
You can use the following two options to clean up the unused SURROGAT profiles:
Rerun the logged RACF commands from your RACF-Offline session against the active
RACF database.
Rerun option AM.8.1 for the SURROGAT class and run the commands against the active
RACF database.
Alternatively, you can run the collected commands interactively by copying the RACF
commands that are collected in the data set CRMB.T.RACF.OFFLINE.B8RLOG to your CKRCMD
work data set. Run the commands in the CLI of any zSecure panel and press Enter to access
the zSecure work datasets. Specify E (Edit) before the CKRCMD data set (see Figure 4-27) and
press Enter.
Specify COPY 'crmb.t.racf.offline.b8rlog' in the CLI and press Enter to copy the logged
RACF-Offline commands to the CKRCMD work data set (see Figure 4-28 on page 81).
You can run the commands interactively by running the command GO or RUN in the CLI or
submit them in the background by running the command SUB or SUBMIT.
Enter data set names and types. Type END or press F3 when complete.
Enter dsname with .* to get a list Type SAVE to save set, CANCEL to quit.
Valid line commands: E L I R D Type REFRESH to submit unload job.
Data set name or DSNPREF=, or Unix file name Type or ? NJE node
_ -DATA SET NAME DYNAMICALLY OBTAINED FROM COMMON STORAGE ACT.BACK ________
_ 'CRMB.T.CKFREEZE' CKFREEZE ________
_ 'C2PACMON.TVT6003.Y12MON' ACCESS ________
******************************* Bottom of data ********************************
Figure 4-29 Selecting the input set with the active RACF database allocated
As expected, the same 126 lines of cleanup commands for the SURROGAT class are generated
for the complex that is named TVT6003. When you specify R (Run) commands and press
Enter, the unused SURROGAT class profiles are successfully removed from the active RACF
database.
4.4.6 Cleaning up other unused security definitions from the active primary
RACF database
This section describes how to clean up other unused security definitions from the active
primary RACF database.
You can continue cleaning up unused resource profiles from other classes by using this same
methodology and following the same steps multiple times.
Similarly, you can also perform a similar scenario with option AM.8.2 to remove unused
permissions from the ACLs of resource profiles that, according to the consolidated year of
Access Monitor records, are not used to access protected resources.
You can use option AM.8.3 to remove user to group connections where, according to Access
Monitor records, the user did not use their group connection to access resources that are
permitted to their connect group.
In addition, you can also use options AM.V (ID verify) or AM.I (ID usage) to analyze the usage
of defined user IDs. You can use these options to report user IDs that are good candidates for
deletion because these IDs were not used during the last year. However, these options do not
automatically generate RACF commands to delete these unused user IDs, including all their
references.
Some reasons for the existence of generic access permissions are as follows:
When new applications are configured, users might not have the full scope of job roles to
understand which job roles have a valid requirement for what access level. This situation
can lead to requests for RACF administrators to permit access based solely on specific
user IDs.
Occasionally, there are business imperatives to release an application that grants priority
over securing it. That strategy can lead to generic accesses that enable the application to
function without security incidents rather than using more job role-based accesses that
are more secure.
Security administrators often feel confident that the types of protections and measures
that they take are secure. This confidence sets aside setting up role-based controls and to
using existing generic access paths. Internal and external auditors do not agree with the
usage of generic access paths to a company’s sensitive resources and demand that more
granular access rules are implemented instead of generic access paths.
Existing security infrastructure, profile definitions, and access lists can predate modern
security best practices. Often, administrators inherit environments that were set up a long
time ago, when security policies might have had inaccurate, outdated, or incomplete
information, if they existed at all.
As a result, both generic and personalized access permissions pose maintenance challenges
or even problems in passing security audits. Moving to RBAC addresses many of these
concerns.
Another common form of generic access in RACF is a permission that applies to all
authenticated users. This permission is access to ID(*), which is equivalent to all
RACF-authenticated user IDs. Although ID(*) is more restrictive than UACC, it still grants
authority to all authenticated users in the RACF environment, which is a lax security policy. As
a best practice, discover which job roles require that access level to the protected resource
and issue a permit command to the collection of corresponding role-based groups instead,
except for resources that all RACF-authenticated users need to have access in your
environment.
Universal and generic access grant uncontrolled access to the resources that a resource
profile protects. Universal and generic access conflicts with zero trust and least privilege. If
anyone can access a resource, the system trusts them with this authority, so there is no zero
trust in the environment. Often, there is a subset of users or programs that do not require this
access to function properly, so this subset does not need UACC.
There are some resource classes and profiles that have a valid business justification for
setting the UACC level to a value that exceeds NONE. For example, the resource classes
NODES, DIGTCERT, and XFACILIT have profiles that might require a UACC setting that exceeds
NONE. For more information about these classes and profiles and why they require this UACC
access, see the RACF Security Administrator’s Guide.
Also, tracking every user’s job role and ensuring that accesses are updated for multiple
profiles as organizational changes are made causes exponentially more work for security
administrators than managing accesses through role-based groups. User-based access is
coupled with other hurdles, such as “what if the one person with access to this resource is
unavailable?” These administrative and logistical challenges make this security management
functionally impossible.
With role-based groups, these accesses can be consolidated, and often in ways that are
self-documenting. As an example, you would have to know why USER1 and USER2 needed
access to a profile, but if both belong to group DEV1 and DEV1 holds this access, the access
might be rooted in the needs of the developer role. If there are changes to the accesses that
are required for the developer role, only the permissions of DEV1 change, not each individual
developer user. Lastly, if a user leaves a role, you remove them from one role-based group,
and possibly add them to a role-based group that represents the user’s new job role. With a
role-based group implementation, there is no need to remove or define explicit user
permissions. Using role-based groups instead of users as the primary method of permitting
access is the only way to manage a RACF environment at scale.
The traditional approach to the migration of RACF permissions is to log all successful access
to all resources to SMF. Then, an administrator goes through the data for the generic profiles
to identify accessing users, and then cross-references these users with common groups. This
solution is not feasible because of the sheer amount of SMF records that this implementation
produces; the required CPU time; the storage that is associated with it; and the monumental
manual work of associating users and groups that are involved.
With zSecure Access Monitor, you can generate reports based on captured access attempts
that highlight user-based, ID(*)-based permissions or UACC-based access. You can use the
Cleanup utility to generate the commands to automatically convert ID(*) permissions or
UACC access events to group-based permissions. Then, with RACF-Offline, you can test new
group definitions and permissions against historic access attempts to resources to confirm
that the conversion commands do not negatively impact production. Therefore, for
conversions from user-based access to group-based access, a security administrator must
manually review the access reports and determine what role-based groups to use or define,
which users to add to those groups, and what access level to permit to which profiles for the
role-based groups. This process must be done in consultation with organizational guidelines
and security policies to help ensure that the new role-based groups reflect the appropriate
roles for the involved users.
After completing these steps, you can continue with the following steps to convert generic and
specific access to group-based access:
Reporting successful access that is allowed through the UACC setting
Converting generic UACC access to group-based access
Reporting the effect of the UACC conversion commands
Reporting successful access through ID(*)
Converting generic ID(*) access to group-based access
Converting generic OPERATIONS access to group-based access
5.4.1 Reporting successful access that is allowed through the UACC setting
This section describes how to report historic successful access that was allowed through the
UACC setting of a resource profile.
You can use the allocated access monitor records to analyze and report which users
successfully accessed resources because the UACC setting allowed the requested access
during the last year. You can use option AM.1 (Access) to report which users accessed
resources through the UACC setting of the protecting resource profile. By default, you can
generate access overview reports for all users and resource classes. In this example, the
report is restricted to the OPERCMDS class by entering opercmds at option SAF resource class.
To limit the report output to only successful accesses that use UACC, you must also activate
the options Further selection and Current RACF DB selection in the “Advanced selection
criteria” section (see Figure 5-1 on page 91).
To research which users get access to resources through the UACC setting, select option 3
(“Summary by simulated authorization used”). This summary type groups access events that
occur through the UACC setting of a resource profile in a single display.
Output/run options
3 1. Summary by userid
2. Summary by member class and profile
3. Summary by simulated authorization used
4. Summary by simulated groups used for access
_ Show configured fields _ Show simulated fields _ Timezone (U/L/H)
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 5-1 Reporting historic access to resources in the OPERCMDS class
After you press Enter, another panel opens. For this analysis report, you are interested only in
reporting successful access events. Select option Success in the Result section by entering /
or S (see Figure 5-2), and press Enter.
If successful UACC access to OPERCMDS resources occurred during the last year, your report
shows which users accessed OPERCMDS resources through UACC authority (see Figure 5-4).
The report reveals which users successfully accessed OPERCMDS resources through UACC
authority. Specify S, and press Enter to review the access event details (see Figure 5-5 on
page 93).
From the “Profile key used” column that reports MVS.MCSOPER.*, you can conclude that the
UACC setting of that OPERCMDS profile is at least READ. In this example, zooming in on the other
reported users reveals that they all obtained READ access through the UACC of the OPERCMDS
profile MVS.MCSOPER.*. However, in practice, your RACF database might contain multiple
OPERCMDS profiles with a lax UACC setting. If so, you encounter other OPERCMDS profiles with a
UACC setting that exceeds NONE in this report. In the next section, you learn how you can
use zSecure Admin to convert access through UACC to group-based access permissions.
Important: The access monitor records show only the users that used the access path
that the current UACC setting allowed. This UACC implementation implies that all other
RACF-authenticated, NJE, and RJE users are also allowed to successfully access these
reported OPERCMDS resources with the same access level. Usually, the allowed access level
through UACC does not exceed READ, but that might not always be the case. zSecure
Admin supports features to (semi) automatically convert historic access that was allowed
through a UACC setting, or an ID(*) permission, to group-based permissions and
connections.
Use option AM.9 (Cleanup) to automatically generate RACF commands that convert the
access that is allowed through the UACC setting. To begin converting UACC-based access to
group permissions and connections, select option 4 (UACC) and press Enter (see Figure 5-6).
Output options
_ Background run
Figure 5-6 Selecting option 4 (UACC) to convert UACC-based access to group-based permissions and
connections.
This section explains how to convert historic access that is granted through the UACC setting
of the OPERCMDS profile MVS.MCSOPER.*. If your system includes multiple resource profiles in the
OPERCMDS or other resource classes with UACC settings greater than NONE, you can apply
the same strategy to convert UACC-based access to group-based permissions and
connections by using IBM zSecure Admin.
Suppose that during your research of historical UACC settings for OPERCMDS resources, you
find that only z/OS systems programmers accessed these resources. With the UACC
conversion function, you can either define a group or use an existing RBAC group for systems
programmers. In the example system, the group CRMB is already defined as the RBAC group
for z/OS systems programmers.
Specify OPERCMDS in the “SAF resource class” field to limit the UACC conversion to resources
in the OPERCMDS class. Because you already identified the existing RBAC group for systems
programmers, enter CRMB in the “Group for permit/connect to convert to” field (see Figure 5-7
on page 95). Press Enter to generate the UACC conversion commands.
Specify data for group for which permit/connect commands are generated
Group for permit/connect CRMB____ (group name; required, no mask allowed)
Superior group . . . . . ________ (group name; optional for new group)
Owner for new group . . ________ (owner name; optional for new group)
Instdata new group . . . ____________________________________________
IBM zSecure Admin successfully generates the required conversion commands, as shown in
Figure 5-8.
As expected, IBM zSecure Admin generates connect commands to group CRMB for the three
users that you identified in your earlier access report. If these users are already connected to
group CRMB, you can remove the corresponding connect commands before running them.
However, leaving these commands in the CKRCMD work data set does not cause issues: The
connect command runs successfully but does not alter the connection unless the user’s
existing group authority or connect privileges differ. In such cases, the command updates the
connection to match the specified settings.
When you are satisfied with the conversion commands, type GO or RUN in the CLI and press
Enter to run them interactively. If you prefer to run the commands in the background as a
batch job, use the SUB or SUBMIT command. In this example, the GO command is used to run
the commands interactively.
After you press Enter, IBM zSecure Admin runs the UACC conversion commands against the
offline RACF database. You are then automatically redirected to the CKRTSPRT work data set,
which displays the results of the ran RACF conversion commands (see Figure 5-9).
=======================================================================
=== Commands for local node
=======================================================================
/* CKRCMD file CKR1CMD complex TVT6003 generated 6 Nov 2024 15:39 */
/* No addgroup cmd created because group CRMB already exists */
If a conversion command fails, the message Command failed appears in the upper right of the
panel. In that case, the CKRTSPRT work data set displays a reference to the record number of
the failed commands at the bottom of the output. To view it, enter the command M (maximum)
in the CLI and press F8 to scroll to the bottom (see Figure 5-10 on page 97).
As expected, all UACC conversion commands ran successfully. The command SETROPTS
REFRESH RACLIST(OPERCMDS) is reported as not supported. Because you use RACF-Offline,
the SETROPTS REFRESH command is not required. (RACF-Offline does not support the
SETROPTS REFRESH command.) You may remove this command from the CKRCMD work data set
before running the conversion. Press F3 to return to the zSecure results panel (see
Figure 5-11).
You can repeat the monthly monitoring process until no additional users are reported as
relying on the UACC(READ) setting. At that point, you can safely change the UACC setting
from READ to NONE.
Your next step is to reduce the UACC setting for the OPERCMDS profile MVS.MCSOPER.* from READ
to NONE. To improve efficiency, you can manually add a RACF command to change the UACC
setting of the profiles to NONE in the CKRCMD work data set before running the UACC conversion
commands.
However, this document illustrates an alternative user interface (UI) supported function to
accomplish this task. Specify =ra.r in the CLI to instruct zSecure Admin to jump to the RA.R
panel and press Enter.
Specify OPERCMDS in the “Class name” field, MVS.MCSOPER.* in the “Resource profile” field, and
select option 2 (Exact) (see Figure 5-12). Then, press Enter.
Output/run options
_ Show segments _ All / Enable full ACL _ Specify scope
_ Show differences / Summarize by class
_ Print format Customize title Send as e-mail
Background run Full detail form Sort differently Narrow print
Print ACL Resolve to users Incl operations Print names
Figure 5-12 List in the OPERCMDS class profile MVS.MCSOPER.*
The query displays the settings for the OPERCMDS profile MVS.MCSOPER.*. As expected, the
UACC is set to READ. Move the cursor to the UACC column and type over READ with the value
NONE (see Figure 5-13 on page 99).
When you press Enter, IBM zSecure Admin generates the appropriate RACF command to
update the UACC setting. Depending on your command confirmation settings, the command
is either ran immediately or as, in this example, presented for confirmation before running (if
your zSecure session is configured to confirm generated commands before running them).
You can configure command confirmation behavior, including whether to queue or run
commands immediately after confirmation, by using option SE.4 (Setup Confirm).
Important: Always confirm the generated commands before running them, which helps
prevent mistakes and provides an opportunity to learn the RACF command syntax while
using IBM zSecure Admin.
On the command confirmation panel, select option 1 (the EXECUTE RACF command), then
press Enter to run the command (see Figure 5-14).
Reason . . . . . . . _______________________________________________________
Press ENTER to continue or END to cancel the command
Figure 5-14 Confirming and running the generated command to change the UACC setting to NONE
Successfully modified
zSecure Admin General resource overview
Command ===> _________________________________________________ Scroll===> CSR
Class OPERCMDS, key mvs.mcsoper.* 6 Nov 2024 16:41
Class Profile key T UACC Owner S/F W
__ OPERCMDS MVS.MCSOPER.* G NONE SYSAUTH R R _
******************************* Bottom of Data ********************************
Figure 5-15 Changing the UACC setting to NONE
Depending on your Setup Confirm configuration, pressing F3 might show the panel in
Figure 5-16.
_________________________________________________________________
| Press PF3 to accept |
C | IBM Security zSecure confirm SETROPTS REFRESH | __________
| Complex TVT6003 |
R | Refresh Class Also affected |
| / GENERIC DATASET |
| ********************* Bottom of Data ********************* |
| |
| |
| |
| |
| |
|_______________________________________________________________|
RACF-Offline does not support the SETROPTS REFRESH command. To indicate that you do not
want to run this command at this stage, remove the / before pressing F3.
After you reduce the UACC setting from READ to NONE, users no longer have UACC access to
the OPERCMDS class resources that are protected by the OPERCMDS class profile MVS.MCSOPER.*.
To verify, use option AM.1 (Access) to rerun the same report that you used earlier. This report
identifies which users can still access OPERCMDS resources through the UACC setting. Use the
selections that are shown in Figure 5-17 on page 101.
Output/run options
3 1. Summary by userid
2. Summary by member class and profile
3. Summary by simulated authorization used
4. Summary by simulated groups used for access
_ Show configured fields / Show simulated fields _ Timezone (U/L/H)
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 5-17 Reporting historic successful access to OPERCMDS resources with the prefix
MVS.MCSOPER
For this analysis, focus only on reporting successful access events. In the Result section,
select the Success option in the Result section by entering / or S, as shown in Figure 5-18.
Then, press Enter to continue.
On this panel, specify that the report should include only successful access through UACC. In
the “Authority used in current DB” section, select the UACC option by entering / or S, as
shown in Figure 5-19. Then, press Enter to proceed.
If users successfully accessed OPERCMDS resources through UACC authority within the past
year, the report displays which users accessed which resources, as shown in Figure 5-20 on
page 103.
Output/run options
3 1. Summary by userid
2. Summary by member class and profile
3. Summary by simulated authorization used
4. Summary by simulated groups used for access
_ Show configured fields / Show simulated fields _ Timezone (U/L/H)
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 5-20 No successful access events were found that used the UACC authority
As expected, the report shows no simulated access to OPERCMDS resources with the prefix
MVS.MCSOPER by using UACC.
Users CRMBAH1, CRMBAH2, and CRMBEP1 no longer rely on UACC for access. Instead, they
access these resources through their connection to group CRMB.
Output/run options
3 1. Summary by userid
2. Summary by member class and profile
3. Summary by simulated authorization used
4. Summary by simulated groups used for access
_ Show configured fields / Show simulated fields _ Timezone (U/L/H)
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 5-21 Removing the option “Current RACF DB selection”
Now, the report shows some access to OPERCMDS resources through user and group
permissions.
Because you already know that the users gain access through group CRMB, select the report
that is named ID_GROUP by entering / or S, as shown in Figure 5-22. Then, press Enter.
The report now displays details of users who accessed OPERCMDS resources through
permissions that were granted to one of their connect groups.
If everything is configured correctly, the users that you connected to group CRMB should
appear in the report. To view more details, select one of the listed users by entering / or S, as
shown in Figure 5-23 on page 105, and press Enter.
On the next panel, continue entering / or S until you reach the “Access summary” panel, as
shown in Figure 5-24.
Once there, enter the M (maximum) command and press F8 to scroll to the bottom of the
details.
This report confirms that the conversion was successful. Users CRMBAH1, CRMBAH2, and
CRMBEP1 can now access the resource without relying on the UACC setting.
Note: Your access summary report might also include user IDs that were not part of the
conversion. These users were already connected to a group other than CRMB that had
existing permission to access the MVS.MCSOPER.* resources.
When you are satisfied with the results of your conversion commands, end your RACF-Offline
session and apply the same UACC conversion commands to your active primary RACF
database.
Next, specify what you want to do with your ISPF Log Data Set.
Select your preferred option, as shown in Figure 5-26 on page 107, and press Enter to return
to READY mode.
To exit your session, enter the command end and press Enter, as shown in Figure 5-27.
To return to the ISPF Primary Option Menu, enter the command ISPF and press Enter. This
time, you are no longer in a RACF-Offline session.
You can now repeat the same steps to generate and run the UACC conversion commands
against the active primary RACF database.
Tip: You can replay this scenario as often as needed to convert UACC settings from other
OPERCMDS profiles or from resource profiles in different resource classes where the UACC
setting exceeds NONE.
When you are ready to convert access permitted to ID(*), you can follow the same approach
that was used for converting successful access through the UACC. However, this time you
must apply different filters to report successful access through permission to ID(*).
Once again, use option AM.1 (Access) and activate similar options as you did when reporting
access through UACC. By default, you can generate access overview reports for all resource
classes that include resource profiles with permission to ID(*).
To include all resource classes in your report, activate the Further selection and Current
RACF DB selection options in the “Advanced selection criteria” section. Because your goal is to
report simulated access through permission to ID(*), use option 2 (“Summary by member
class and profile”), as shown in Figure 5-28. This summary displays each resource class and
profile that include permission to ID(*).
Output/run options
2 1. Summary by userid
2. Summary by member class and profile
3. Summary by simulated authorization used
4. Summary by simulated groups used for access
_ Show configured fields _ Show simulated fields _ Timezone (U/L/H)
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 5-28 Reporting historic access to resources summarized by class and profile
For this analysis, focus only on reporting successful access events. In the Result section,
select the Success option by entering / or S, as shown in Figure 5-29 on page 109. Then,
press Enter to continue.
On this panel, specify that the report should include only successful access through
permission to ID(*). In the “Authority used in current DB” section, select the ID_STAR option
by entering / or S, as shown in Figure 5-30. Then, press Enter.
The generated report provides an overview of all resource classes that contain a profile with
permission to ID(*) on the access control list (ACL) that is used by users to access protected
resources.
The overview displays three DATASET class profiles that include a permission to ID(*).
To view the details of the DATASET profile USER.*.**, enter /, as shown in Figure 5-32, and
press Enter.
Continue entering / or S until you reach the detail panel for the access record.
Scroll to the bottom of the panel to view the “Current RACF database effect” section, as
shown in Figure 5-33.
This section displays the relevant RACF class and profile. To view the profile details, enter P
(Show profile), as shown in Figure 5-34, and press Enter.
This action performs a recursive call from your report to display the settings of the DATASET
class profile USER.*.**, as shown in Figure 5-35.
_ Identification TVT6003
Profile name USER.*.**
Type GENERIC
Volume serial list
_ Effective first qualifier USER DATASET OWNER?
_ Owner SYSAUTH AUTHORIZATION GRO
Installation data _______________________________________________
If you inspect the other reported DATASET, SDSF, or SERVAUTH class profiles, you find that each
one also includes a permission to ID(*) on either the ACL or CACL.
Important: If you logged off your RACF-Offline session earlier, start a new session now
before generating the ID(*) conversion commands.
Suppose that your auditors require you to convert ID(*) permissions in DATASET class profiles
to a new group that is named IDSTAR, with CRMB as both the owner and superior group.
To generate the appropriate RACF conversion commands, use option AM.9.5 (Cleanup –
ID(*)), as shown in Figure 5-36.
Specify data for group for which permit/connect commands are generated
Group for permit/connect idstar (group name; required, no mask allowed)
Superior group . . . . . crmb____ (group name; optional for new group)
Owner for new group . . crmb____ (owner name; optional for new group)
Instdata new group . . . Conversion of ID(*) dataset permissions_____
When you press Enter, the ID(*) conversion commands are successfully generated in the
CKRCMD work data set, as shown in Figure 5-37 on page 113.
At the top of the CKRCMD data set, you find the ADDGROUP command followed by the appropriate
CONNECT commands for users who historically used the ID(*) permission for DATASET profiles
during the past year, as shown in Figure 5-38.
When you scroll to the bottom of the CKRCMD work data set, you see three permit commands
that grant group IDSTAR the same access level that was previously granted to ID(*).
Before running the commands, verify that all users being connected to group IDSTAR require
this level of access to the relevant datasets.
Scroll to the bottom of the data set to confirm that all commands ran successfully.
In practice, you can monitor the usage of ID(*) access to datasets over an extended period
and connect more users who rely on this permission to access protected datasets.
After some time, if no new conversion commands are generated, remove the ID(*)
permissions from the relevant DATASET class profiles in the Offline RACF database.
To identify these profiles, use option RA.D (RACF Administration – Data set) to report DATASET
profiles that include ID(*) on the ACL. In the “Additional selection criteria” section, select the
Access list option, as shown in Figure 5-40 on page 115, and press Enter.
Make sure that you enclose the asterisk in single quotation marks to prevent zSecure Admin
from interpreting it as a wildcard character, as shown in Figure 5-41.
The system reports all DATASET profiles that include a permission to ID(). If you see more
DATASET profiles than the ones that were listed in your earlier access monitor report, it means
that users did not use the ID() permissions last year to access the protected datasets. Based
on this observation, you determine that these DATASET profiles no longer need the ID(*)
permission and you can remove it.
However, your organization might require you to follow a formal procedure, such as opening a
change management ticket and obtaining management approval, before removing the
permissions to ID(*).
Press F11 to scroll right. This action reveals a column that is labeled ID(*), which displays
the access level that is granted to ID(*) in the Access Control List (ACL) or Conditional
Access Control List (CACL) of each relevant DATASET profile (see Figure 5-43 on page 117).
To view the details of the DATASET profile USER.*.**, enter S, which displays the settings for
the profile.
To delete the permission for ID(*), enter D before the corresponding ACL entry, then press
Enter (see Figure 5-44).
_ Identification TVT6003
Profile name USER.*.**
Type GENERIC
Volume serial list
_ Effective first qualifier USER DATASET OWNER?
_ Owner SYSAUTH AUTHORIZATION GRO
Installation data _______________________________________________
Repeat the same steps to remove the ID(*) permissions from the DATASET profiles
CATALOG.** and CRMA.X.**.
Exit your RACF-Offline session, then start ISPF to verify the results of the conversion against
the offline RACF database.
You can now confirm whether your conversion commands worked as intended. Simulate
historical access events against the offline RACF database for the DATASET class. The results
should show that access through ID(*) no longer occurs.
Use option AM.1 again to generate a report of ID(*) access to DATASET class profiles (see
Figure 5-46 on page 119).
Output/run options
2 1. Summary by userid
2. Summary by member class and profile
3. Summary by simulated authorization used
4. Summary by simulated groups used for access
_ Show configured fields / Show simulated fields _ Timezone (U/L/H)
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 5-46 Verifying whether DATASET access through a permission to ID(*) still occurs
On the next panels (not shown in this document), select only the successful access events. In
the “Authority used in current DB” section, choose the ID_STAR option, then press Enter to
generate the report (see Figure 5-47).
Output/run options
2 1. Summary by userid
2. Summary by member class and profile
3. Summary by simulated authorization used
4. Summary by simulated groups used for access
_ Show configured fields / Show simulated fields _ Timezone (U/L/H)
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 5-47 Results of query whether permission to ID(*) to access DATASET resources
You can now repeat the same steps to run the ID(*) conversion commands against the active
primary RACF database.
You can apply similar steps to migrate ID() permissions in other reported classes, such as
SDSF and SERVAUTH. Alternatively, you can generate a report of all profiles in your RACF
database that include a permission to ID(). Any classes and profiles that are listed in this
report, but not shown in your access overview, represent permissions that were not used in
the past year. These profiles are strong candidates for additional cleanup.
The approach for converting OPERATIONS access is similar to the method that is used for
converting UACC and ID(*) permissions. However, the zSecure Admin user interface does
not support automatic generation of commands for converting OPERATIONS access to
group-based access.
With some manual adjustments to the CARLa Auditing and Reporting Language (CARLa)
code that zSecure Admin uses behind the scenes, you can perform this conversion
semi-automatically.
To begin, use option AM.1 to report successful access events that occurred through
OPERATIONS to datasets (see Figure 5-48).
Output/run options
1 1. Summary by userid
2. Summary by member class and profile
3. Summary by simulated authorization used
4. Summary by simulated groups used for access
_ Show configured fields _ Show simulated fields _ Timezone (U/L/H)
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 5-48 Reporting historic access to resources summarized by user ID
On this panel, specify that the report should include only successful access through the
system-OPERATIONS attribute. In the “Authority used in current DB” section, select the
SYS_OPER option by entering / or S, then press Enter (see Figure 5-50).
Because option AM.9 does not support automatic conversion of OPERATIONS usage, you must
use a more manual approach. This method requires advanced knowledge of, and experience
with, the zSecure specific CARLa programming language.
Press F3 to return to the AM.1 report. Then, type RESULT in the CLI and press Enter to open
the zSecure Results panel, which displays the zSecure work datasets (see Figure 5-52).
The CARLa script that is generated by your selection filters is stored in the COMMANDS work
data set.
Enter S to open the CARLa code. Then press Enter to access the COMMANDS work data set,
which contains the CARLa code that was used to produce your report (see Figure 5-53 on
page 123).
The bolded SELECT statement in the report reflects the panel selections that you made to
generate the system-OPERATIONS access report. You can copy this statement and use it as the
foundation for your own CARLa program to generate system-OPERATIONS conversion
commands instead of a report.
After copying the SELECT statement, press F3. Then, enter CARLA on the CLI and press Enter
to open the CARLa editor. If you have used the editor before, your previous CARLa code will
still be available. If this is your first time using it, the editor opens with a blank panel (see
Figure 5-54).
Running the CARLa script with the GO or RUN command should produce output similar to what
is shown in Figure 5-56 on page 125.
Before running the commands, review the generated permit statements to identify and
remove duplicates to the same DATASET profile with different access levels. Keep only the
permit command with the highest access level.
In this example, delete the commands on lines 4, 7, and 10 before running the commands.
If the users IBMUSER and IWST did not use OPERATIONS access for other resources in classes
that acknowledge the OPERATIONS attribute (which you have not yet verified), you can safely
remove the OPERATIONS attribute from their profiles. To verify whether OPERATIONS access was
used, use the same steps that are outlined in Figure 5-25 on page 106 through Figure 5-27
on page 107 to exit your RACF-Offline session. Then, verify that no system-OPERATIONS
access is reported for the DATASET class (see Figure 5-58 on page 127).
Output/run options
1 1. Summary by userid
2. Summary by member class and profile
3. Summary by simulated authorization used
4. Summary by simulated groups used for access
_ Show configured fields / Show simulated fields _ Timezone (U/L/H)
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 5-58 Confirming that no system-OPERATIONS data set access occurs
You can apply the same approach and steps to convert system-OPERATIONS usage in other
resource classes.
Now, repeat the same steps to run the OPERATIONS attribute conversion commands against
the active primary RACF database.
For example, if a user needs only READ access to a resource that is protected by a RACF
profile, the administrator must not grant UPDATE, CONTROL, or ALTER access instead. Although
RACF does not generate authorization errors in such cases, excessive permissions increase
the risk of security exposures.
This scenario illustrates the importance of enforcing least privilege. Granting ALTER access
when only READ is needed violates this principle and creates opportunities for compromised or
malicious users to perform unauthorized actions. Overly permissive access definitions
weaken security and can lead to serious vulnerabilities.
User IDs with the OPERATIONS attribute receive ALTER access to resources in the dataset and
general resource classes that acknowledge this attribute. When such a user accesses a
resource in one of these classes, RACF grants ALTER access by default. However, if the user
ID or one of its connected groups is granted a different access level, RACF uses the access
level that is defined in the access control list (ACL) or conditional ACL (CACL) instead.
Auditors often flag the usage of the OPERATIONS attribute as uncontrolled access. Assigning
this attribute violates the principle of least privilege by granting broad, default permissions. It
also undermines zero trust principles by bypassing granular access controls.
To strengthen your system’s security posture, replace the OPERATIONS attribute with explicit
permissions that align with the user’s job responsibilities. This approach helps ensure tighter
control and better alignment with least privilege and zero trust models.
Using the WARNING attribute violates both the principle of least privilege and the zero trust
model by granting broad, default access to all users. While useful during initial setup, it must
be used cautiously and only for a limited time.
However, the GAC tables must not grant access to resources when access to the resource
would not be allowed for certain users, or when the company must report who accessed that
resource. The usage of GAC tables and the list of globally accessible resources must be
monitored.
Improper usage of tables violates the principle of zero trust because it grants access to the
specified resource to all users.
IBM zSecure Access Monitor simplifies this task by generating reports that highlight ACL
entries where the permitted access level exceeds what the user requested. Also,
administrators can use CARLa Auditing and Reporting Language (CARLa) scripts to
automatically generate RACF commands that reduce excessive privileges and support a
migration to a least privilege model.
Before applying these changes to a live RACF database, administrators can test their impact
by using RACF-Offline. This approach allows for safe validation of security adjustments in an
offline environment.
After completing these steps, you can proceed with the next phase: minimizing access control
privileges, which includes the following steps.
Reporting the historical permitted DATASET access levels that exceed the used access
levels
Implementing least privilege for the DATASET class
Verifying the permit commands for the DATASET class
Running permit commands against the active primary RACF database
Reporting permitted general resource access levels that exceed the used access levels
6.4.1 Reporting the historical permitted DATASET access levels that exceed
the used access levels
This section explains how to report historical DATASET access where the allowed access level
exceeds the level that is used.
You can use allocated Access Monitor records to identify users who successfully accessed
resources with more privileges than they used. To generate this report, use option AM.3
(Permit usage). This report shows users who accessed resources with a requested access
level that is lower than their permitted access level.
Also, select option 2 (Simulate access in database to find current profile) to help ensure that
the report reflects the current access definitions.
Output/run options
_ Print format Customize title Send as email
Background run Full page form
Figure 6-1 Reporting historic access to resources in the DATASET class
Permit selection
Creation date from . . __________ Until __________
This selection generates a permit usage overview report for DATASET profiles that users
accessed, where the permitted access level exceeds the highest level that they used. To
review the details, enter S (see Figure 6-3) and press Enter, which opens the DATASET profile,
where you can examine the ACL and identify permissions that might be candidates for
reduction.
Line 1 of 32
Unconditional permits and UACC, by class complex/profile
Command ===> _________________________________________________ Scroll===> CSR
Access monitor records for Classes like DATASET 12 Nov 2024 14:30
Allowed Deny Unexp LastUse Class Complex
4108400 264 0 31Oct24 DATASET TVT6003
Allowed Deny Unexp LastUse Type Profile
__ 13011 0 0 31Oct24 GENERIC CATALOG.**
S 20442 0 0 31Oct24 GENERIC CKNSERVE.**
__ 7 0 0 23Oct24 GENERIC CRMA.T.**
__ 20710 0 0 31Oct24 GENERIC CRMA.X.**
__ 6378 0 0 31Oct24 GENERIC CRMAUTO.**
__ 1 0 0 12Sep24 GENERIC CRMBAH1.TEST12.**
__ 187 0 0 5Dec23 GENERIC CRMBEP1.*.**
__ 96 0 0 31Oct24 GENERIC CRMBJK1.*.**
__ 65 0 0 17Sep24 GENERIC CRMBJU1.**
__ 2 0 0 17Sep24 GENERIC CRMBJU1.LOADLIB
__ 4888 0 0 30Oct24 GENERIC CRMBMK1.*.**
__ 2 0 0 13Sep24 GENERIC CRMBMK1.TE%T
__ 30 0 0 22Mar24 GENERIC CRMBPH1.*.**
Figure 6-3 Reporting DATASET profiles where the allowed access level exceeds the used access level
The next panel displays the specific permissions where the allowed access level exceeds the
used access level (see Figure 6-4).
The report shows that user C2RSERVG successfully used the UPDATE permission 20,441 times
to access datasets with the high-level qualifier (HLQ) CKNSERVE. However, during all of these
historical access events, the user only exercised READ access, even though UPDATE was
permitted.
Line 1 of 28
Unconditional permits and UACC, by class complex/profile
Command ===> _________________________________________________ Scroll===> CSR
Access monitor records for Classes like DATASET 12 Nov 2024 16:03
Unconditional permit
_ Permit or connect id C2RSERVG
Access or authority UPDATE
Highest access used READ
Lowest access prevented
Permit reduces access No
Merged permit reduces access
Username
Installation data
Figure 6-5 Profile CKNSERVE.** permission to C2RSERVG
After you press Enter, the security definitions for the DATASET profile that is named
CKNSERVE.*** appear (see Figure 6-6 on page 137). As expected, the ACL includes a
permission granting group ID C2RSERVG the UPDATE access level.
To tighten security, you can manually reduce this access by typing over UPDATE with READ,
pressing Enter, and running the generated command.
However, this is just one instance. Access Monitor records show that other DATASET profiles
also grant access levels that exceed what users historically used. These profiles should also
be reviewed and adjusted to align with the principle of least privilege.
_ Identification TVT6003
Profile name CKNSERVE.**
Type GENERIC
Volume serial list
_ Effective first qualifier CKNSERVE MULTI-SYS SERVER ZSECURE 1.12+ MUL
_ Owner SYSPROG SYSTEM PROGRAMMIN
Installation data _______________________________________________
Instead of manually updating the permitted access levels for this and the other 32 affected
DATASET profiles, you can automate the process by using your CARLa programming skills.
With CARLa, you can generate the appropriate permit commands to reduce each user's
access level to match the highest level they used.
To begin, press F3 repeatedly until you return to the AM.3 “Permit usage” panel.
When you used the recursive call to display the security definitions of the DATASET profile
CKNSERVE.**, it overwrote the CARLa code that was originally composed to generate your
permit usage report. To restore the CARLa code, rerun the “Permit usage overview” report.
This time, avoid using P (Show profile) to display the CKNSERVE.** profile.
Output/run options
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 6-7 Using the result command to access zSecure work datasets
After you press Enter, the zSecure Results panel appears. The CARLa code that used to
generate your report (showing which DATASET profiles grant higher access levels than users
used) is stored in the COMMANDS work data set.
To view this code, enter S or E to open the COMMANDS work data set (see Figure 6-8).
Your goal is to locate the SELECT statement that filters Access Monitor records to show only
access events where the permitted access level exceeds the used access level. To find these
events, press F8, then press Enter to scroll down through the script until you reach the
SELECT statement that was generated by the UI-based selection filters (see Figure 6-9).
Your next task is to modify the CARLa script so that it generates RACF permit commands
instead of a permit usage report. You can reuse the existing SELECT statement from your
previous script as the foundation for this customization.
The updated CARLa script should automatically produce permit commands that reduce
access levels to match the highest level that is used by each user. An example of such a
customized script is shown in Figure 6-11.
Tip: If you plan to use this CARLa script regularly, consider saving it in your CARLa
samples library.
When you run the CARLa script by using the GO or RUN command, CARLa automatically
opens the CKRCMD work data set. This dataset contains the generated permit commands that
help implement the principle of least privilege for DATASET profiles on your system (see
Figure 6-12).
Important: Before you run these automatically generated commands, carefully review
them to help ensure that they meet your system’s requirements.
Verify that the generated permit access level is not a pseudo access level from a define-type
access event, which RACF does not support for datasets. Valid access levels for datasets are
UPDATE, CONTROL, and ALTER.
If you encounter other values, you can either adjust the access_intent_max_suc<> filters in
your CARLa script and rerun it, or delete the corresponding permit command from the CKRCMD
work data set before running the commands.
If you find unsupported values, you can either adjust the ACCESS <> filters in your CARLa
script and rerun it, or delete the corresponding permit command from the CKRCMD work data
set before running the commands.
Also consider that for DATASET profiles, a specific job role typically acts as the custodian of the
datasets. This custodian needs the authority to create, update, and delete the protected
datasets. Even if the custodian did not use ALTER access in the past year, reducing that
access might not be appropriate.
Before making changes, check whether the ID with ALTER access is the only one that is listed
in the ACL. If so, it is best to leave the ALTER permission unchanged. However, if the HLQ of
the DATASET profile matches a user ID, reducing ALTER access is likely acceptable. Using
personal user datasets in a production environment is considered a poor practice.
In the example, the diagnostics review confirmed that ALTER permissions for group SYSPROG
should not be reduced. The z/OS systems programmers serve as custodians of these
datasets and require ALTER access in certain situations.
After removing the generated permit commands for ID SYSPROG from your CKRCMD work data
set, you can run the remaining commands against your offline RACF database by entering
the GO or RUN command and pressing Enter (see Figure 6-13).
As usual, CARLa automatically opens the CKRTSPRT work data set, which displays the results
of the ran permit commands. All commands were processed successfully. You can scroll to
the bottom of the CKRTSPRT data set to see the confirmation message indicating that all
commands completed without errors.
Press F3 a few times to exit ISPF, then terminate your RACF-Offline session by entering the
end command. Next, start a regular TSO session by entering ISPF on the CLI and pressing
Enter. This session uses the primary RACF database for access verification.
To confirm that your changes had the intended effect, start IBM zSecure Admin and ensure
that your allocated input set includes the offline RACF database that you used when running
the permit commands.
Then, use option AM.3 again to generate a report showing where DATASET profiles still allow
higher access levels than what the permitted IDs use (see Figure 6-14).
Output/run options
_ Print format Customize title Send as e-mail
Background run Full page form
Figure 6-14 Reporting historic access to DATASET class resources against an offline RACF database
After you press Enter, the Further selection panel opens. On this panel, select the option
Highest access used less than access allowed to identify cases where the least privilege
principle might not be correctly implemented (see Figure 6-15 on page 145). Then, press
Enter to continue.
Permit selection
Creation date from . . __________ Until __________
This selection generates a permit usage overview report for DATASET profiles that are used to
access protected datasets. The report highlights cases where the permitted access level
exceeds the highest access level that is used by the permitted IDs (see Figure 6-16).
Line 1 of 26
Unconditional permits and UACC, by class complex/profile
Command ===> _________________________________________________ Scroll===> CSR
Access monitor records for Classes like DATASET 13 Nov 2024 12:17
Allowed Deny Unexp LastUse Class Complex
56232 248 0 31Oct24 DATASET TVT6003
Allowed Deny Unexp LastUse Type Profile
__ 1 0 0 25Oct24 GENERIC CKNSERVE.**
__ 7 0 0 23Oct24 GENERIC CRMA.T.**
__ 20710 0 0 31Oct24 GENERIC CRMA.X.**
__ 6378 0 0 31Oct24 GENERIC CRMAUTO.**
__ 1 0 0 12Sep24 GENERIC CRMBAH1.TEST12.**
__ 187 0 0 5Dec23 GENERIC CRMBEP1.*.**
__ 87 0 0 31Oct24 GENERIC CRMBJK1.*.**
__ 4888 0 0 30Oct24 GENERIC CRMBMK1.*.**
__ 2 0 0 13Sep24 GENERIC CRMBMK1.TE%T
__ 30 0 0 22Mar24 GENERIC CRMBPH1.*.**
__ 10 0 0 16Oct24 GENERIC CRMBRL1.*.**
__ 162 0 0 16Sep24 GENERIC CRMBRS1.*.**
__ 3344 0 0 31Oct24 GENERIC CRMBTZ1.*.**
__ 1472 0 0 31Oct24 GENERIC CRMBVK1.*.**
__ 58 0 0 16Oct24 GENERIC CRMBVK2.*.**
__ 13 248 0 31Oct24 GENERIC CSF.SCSFMOD0
__ 11597 0 0 31Oct24 GENERIC C2PACMON.*.**
Figure 6-16 Report DATASET profiles where permitted access exceeds used access
As illustrated, the permit usage report still reports 26 DATASET profiles with permissions that
permit an access level that exceeds the used access level. However, when you zoom in to the
profile details, you notice that the pseudo access levels such as QUALOWN and ALTER-O are still
included in this report.
As shown in the report, 26 DATASET profiles still have permissions that allow access levels that
exceed what was used. However, when you examine the profile details, you notice that
pseudo access levels such as QUALOWN and ALTER-O are still included in the report.
To refine the results, press F3, enter the RESULT command on the CLI, and press Enter to
open the Results panel. Then, enter S or E to access the COMMANDS work data set and press
Enter. Scroll down by pressing F8, add the filter access<>(QUALOWN,ALTER-O) to the SELECT
statement, and run the script again by entering the GO or RUN command (see Figure 6-17).
When you press Enter, CARLa runs your adjusted script and generates a customized version
of the original permit usage report. This updated report focuses on DATASET class profiles with
permissions that exceed the access levels that are used by the permitted IDs (see
Figure 6-18 on page 147).
As shown in the updated report, only 11 DATASET profiles remain, which is a reduction from 32
in Figure 6-3 on page 134 and 26 in Figure 6-16 on page 145.
Why does the report still show 11 DATASET profiles with permitted access levels that exceed
the access levels that are used? Recall that your earlier analysis identified the SYSPROG group
as the custodian job role for several of the originally reported datasets. Based on that finding,
you chose to remove the generated permit commands for SYSPROG from the CKRCMD work data
set before running the commands.
If everything worked as expected, the remaining 11 DATASET profiles should reflect ALTER
access permissions for ID SYSPROG, which are necessary for adding or deleting datasets in
specific scenarios (see Figure 6-19). You can confirm this change by entering S to view the
profile details.
Line 1 of 1
Unconditional permits and UACC, by class complex/profile
Command ===> _________________________________________________ Scroll===> CSR
,Access monitor records for Classes like DATASE 13 Nov 2024 12:29
Allowed Deny Unexp LastUse Class Complex
30548 248 0 31Oct24 DATASET TVT6003
Allowed Deny Unexp LastUse Type Profile
20710 0 0 31Oct24 GENERIC CRMA.X.**
Allowed Deny Unexp LastUse Id Access Used Failed Red RdM Name
__ 20710 0 0 31Oct24 SYSPROG ALTER READ No
******************************* Bottom of Data ********************************
Figure 6-19 Report DATASET profiles where allowed access intentionally exceeds used access
If you are satisfied with the results, the next step is to run the same permit commands against
the primary RACF database.
If you saved the CARLa script in Figure 6-11 on page 140, you can reuse it. To improve the
script, consider adding the filter ID<>SYSPROG to the SELECT statement, which prevents the
generation of permit commands for the group SYSPROG (see Figure 6-20).
Before running the CARLa script, you must switch your selected input set in IBM zSecure.
Use option SE.1 to choose an input set that includes a different RACF input source
(specifically, your active primary RACF database) and your Access Monitor consolidation data
set.
Running this version of the script generates the updated permit commands in the CKRCMD work
data set (see Figure 6-21 on page 149).
You can run the commands against the primary RACF database by entering the GO or RUN
command.
Alternatively, you can rerun the permit commands by using your RACF-Offline log data set.
This dataset stores the RACF commands that ran during your last RACF-Offline session.
Enter E (Edit) to open the CKRCMD data set, then press Enter (see Figure 6-23).
After you press Enter, a warning message appears (see Figure 6-24 on page 151).
Because you know that none of the generated permit commands exceed 80 characters, you
can press Enter to proceed with truncation.
However, instead of using the zSecure CKRCMD work data set, you might prefer to run these
commands in the background by using a batch job. If so, use the data set
CRMB.T.RACF.OFFLINE.B8RLOG as the input source.
The command CKGRACF show myaccess on line 1 runs automatically when you start zSecure
Admin in an ISPF environment. zSecure uses this command to verify which menu options
and commands that you are authorized to use.
zSecure supports customizing both menu options and action commands based on user
authorizations. Access to these functions is controlled by profiles with the prefix CKR.ACTION.
in the XFACILIT class. However, most zSecure customers do not define CKR.ACTION.**
profiles in the XFACILIT class.
It does not matter whether you delete the CKGRACF show myaccess command or leave it in
when running the command set.
To run the commands against the active RACF database, enter the GO or RUN command.
This step concludes the walkthrough for implementing the least privilege principle for the
DATASET class. However, because the permit command syntax differs for general resource
classes, you need a slightly modified CARLa script to handle those resources.
To do this task, use option AM.3 (Permit usage), but specify a class name other than DATASET,
for example, FACILITY. Apply the same filters that you used for reporting access to the
DATASET class.
This selection generates a permit usage report similar to the one that is shown in Figure 6-26.
Line 1 of 9
Unconditional permits and UACC, by class complex/profile
Command ===> _________________________________________________ Scroll===> CSR
Access monitor records for Classes like FACILIT 13 Nov 2024 14:54
Allowed Deny Unexp LastUse Class Complex
121151 0 0 31Oct24 FACILITY TVT6003
Allowed Deny Unexp LastUse Type Profile
__ 118983 0 0 25Oct24 GENERIC CSVAPF.**
__ 245 0 0 12Sep24 GENERIC CSVDYNEX.**
__ 8 0 0 25Oct24 GENERIC CSVDYNL.**
__ 655 0 0 25Oct24 GENERIC CSVLLA.**
__ 330 0 0 31Oct24 DISCRETE IRR.DIGTCERT.GENCERT
__ 329 0 0 31Oct24 DISCRETE IRR.DIGTCERT.LISTRING
__ 396 0 0 29Oct24 GENERIC STGADMIN.ADR.*
__ 198 0 0 29Oct24 GENERIC STGADMIN.ADR.STGADMIN.*
__ 7 0 0 16Sep24 GENERIC STGADMIN.IGG.*
******************************* Bottom of Data ********************************
Figure 6-26 Reporting FACILITY profiles where the allowed access exceeds the used access
When you zoom into a FACILITY profile level by using S (Select), the display reveals which
permissions allow a higher access level than the permitted IDs used (see Figure 6-27).
Line 1 of 2
Unconditional permits and UACC, by class complex/profile
Command ===> _________________________________________________ Scroll===> CSR
Access monitor records for Classes like FACILIT 13 Nov 2024 14:54
Allowed Deny Unexp LastUse Class Complex
121151 0 0 31Oct24 FACILITY TVT6003
Allowed Deny Unexp LastUse Type Profile
245 0 0 12Sep24 GENERIC CSVDYNEX.**
Allowed Deny Unexp LastUse Id Access Used Failed Red RdM Name
__ 222 0 0 12Sep24 CRMBZDEV ALTER UPDATE No
__ 23 0 0 30May24 SYSPROG ALTER UPDATE No
******************************* Bottom of Data ********************************
Figure 6-27 Reporting FACILITY profiles where the permitted access exceeds the used access
In this example, two permissions grant ALTER access to the CRMBZDEV and SYSPROG IDs.
However, according to Access Monitor data, their highest access level that was used in the
past year was UPDATE. These permissions are strong candidates for reduction to support a
least privilege implementation.
For example:
The FACILITY class profile BPX.SUPERUSER controls which users are authorized in UNIX
System Services to switch to UNIX superuser mode (UID(0)).
The UNIXPRIV class profile SHARED.IDS determines which RACF administrators can assign
a shared UID value to multiple users.
Many other profiles in various general resource classes serve similar purposes.
For resource profiles that do not protect a physical resource, the concept of a custodian does
not apply. In these cases, it is acceptable for the ACL to exclude any permissions with the
ALTER access level.
To exit the report displaying the FACILITY class profiles, press F3 twice. Then, enter the
result command on the CLI and press Enter to open the zSecure Results panel.
To support least privilege implementation across all general resource classes, create a
CARLa script that automatically generates permit commands.
Scroll down by pressing F8 to review the composed SELECT statement (see Figure 6-28).
As with the DATASET class, you can use the composed SELECT statement in your customized
CARLa script to generate permit commands that enforce the least privilege principle for
general resource class profiles in your system.
The appropriate RACF permit commands, which reduce permitted access levels based on
evidence from Access Monitor records, are successfully generated in the CKRCMD work data
set.
Important: Always review all generated commands carefully. If any commands appear
unexpected, perform more inquiries to verify their accuracy.
For general resource profiles that protect a physical resource, do not remove ALTER access
from the custodian, even if Access Monitor records show that ALTER access was not used
in the past year.
After completing your review and removing any commands that should not run, run the
remaining commands against the offline RACF database. Use the GO or RUN command to run
them in the foreground, or use SUB or SUBMIT to run them as a background batch job.
Next steps:
Verify that the permit commands that ran successfully implemented the least privilege
principle for general resource classes. Follow the same verification steps that are
documented for the DATASET class in 6.4.4, “Running permit commands against the active
primary RACF database” on page 148.
After verification, run the same permit commands against the active primary RACF
database to apply the changes in the live environment.
SG24-8578-00
ISBN 0738462136
Printed in U.S.A.
®
ibm.com/redbooks