The HTTPD server can check a userid’s access to a RACF APPLID to enforce checks on resources.
Setting it up to give access seemed trivial, setting it up to deny access took longer.
In my VirtualHost I had
SAFAPPLID ZZZ
AuthType Basic
AuthBasicProvider saf
SAFRunAs %%CLIENT%%
Require saf-user ADCDA
Require saf-group SYS1
This says
- userids must have read access to the APPL profile ZZZ.
- a request should include the userid and password as part of the request.
- the userid must be ADCDA or in group SYS1.
If the RACF profile is not set up (or not set up properly) then access defaults to yes.
Setup the profile
rdefine APPL ZZZ uacc(NONE) NOTIFY(COLIN)
setropts raclist(APPL) refresh
The NOTIFY is to notify a user(COLIN) when a user is denied access to the resource. This is useful while testing to check authentication is working. A failed attempt gave me
ICH70004I USER(ADCDB) GROUP(ADCDGR) NAME(COLIN PAICE) ATTEMPTED ‘READ’ ACCESS OF ‘ZZZ’
You do not get a message if a user does not have the right access (as you do with other resources), so the NOTIFY seems the only way of finding out there is a problem.
If I logged on with certificate, the same checks were done.
To give a user access, (actually it is better to give the user’s group access)
permit ZZZ class(APPL) ID(WEB2) access(READ)
setropts raclist(APPL) refresh
Problems with SAFAPPLID
The SAFAPPLID statement is meant to be supported in directory, virtual host, and server sections, but it only accepted it in the <Directory… section.
For example the following fails to parse
<virtualHost *:8833>
SAFAPPLID ZZZ
with
AH00526: Syntax error on line 11 of /u/mqweb3/conf/notls.conf: SAFAPPLID not allowed here
Originally I defined APPL ZZZZZZZZ, but used ZZZZZZZ (7 Z’z not 8). And the application continued to have access to HTTPD. By specifying NOTIFY(COLIN) this notified me when the request failed.
With
<VirtualHost …>
LogLevel debug
ErrorLog “/u/mqweb3/conf/yy.log”
I got the following in the yy.log file
pthread_security_applid_np(__CREATE_SECURITY_ENV, __USERID_IDENTITY, 5, colin, …, 0, ZZZ) returned OK
From this I can see the userid “colin”, the SAFAPPLID “ZZZ”, and the return code “OK”.
One thought on “HTTPD, SAFAPPL and protecting web resources”