Object Level Security
Question: Which is the better procedure to secure objects on the AS/400 in a large enterprise with over 2,000 user profiles? Is it better to use strictly group profiles or a combination of authorization lists and group profiles? My application development teams advocate using authorization lists and group profiles, while my operations people vote for group profiles because they say it doesnt impact the system performance as much. Ive always understood that if you set *PUBLIC to *EXCLUDE on authorization lists, system performance isnt an issue.
Answer: When viewed from a security-management point of view, it is far better to use a combination of group profiles and authorization lists to secure objects on OS/400. For the purpose of demonstration, say you have 2,000 users and 50,000 objects (a reasonable assumption, as OS/400 alone can account for more than 18,000 objects). If you were to implement pure Object Level Authority (OLA) by user profile, you could find yourself having to define one hundred million (2,000 users x 50,000 objects = 100,000,000) different relationships. Clearly, this is not practical.
The benefits of group profiles are fairly well known. If you have 2,000 users on your system, there is a strong chance that most of these users could be grouped into a few functional group profiles based on the users job responsibilities. By associating those 2,000 users into functional areas, you may find that there are only 30 or 40 distinct functional job areas that need to be separately managed. Those 30 to 40 functional areas can easily be represented as group profiles on your iSeries. These group profiles then become the basis for describing how users will access your applications.
The benefit that authorization lists provide to regular OS/400 objects (such as files and programs) should be viewed as similar to the benefit that group profiles provide to user profiles. Authorization lists allow you to describe the similarities of objects (from a security perspective) so that they can be regulated from a single point. In a typical application, the security requirements for most programs (your user community needs no more than *USE) and the security requirements for application data (your user community seldom needs more than *CHANGE authority to data) can be represented by two authorization lists. The first list would secure all of the program objects and grant the user community *USE authority to those objects, and the second list would secure the data objects and grant the user community no more than *CHANGE authority to the data. If you had 12 separate
applications on your system and they each required just two authorization lists, it is reasonable to assume that you could define all of the objects on your system by enrolling them in just 24 authorization lists (12 applications x 2 authorization lists per application = 24 authorization lists).
Now, here is the really cool part: If you take the number of user profiles (30) and multiply it by the number of authorization lists (24), you get 720 unique relationships that must be managed. Youve still got a fair piece of work to do, but it is a lot easier to actually accomplish something when your to-do list is reduced from 100,000,000 items to just 720. This is where authorization lists really show their value.
As for performance, that should be measured not only by the processing time it takes to complete a task but also by the time it takes to manage, implement, and debug that task. From this perspective, authorization lists win hands down.
I have used authorization lists in a number of environments and have not experienced any performance issues. While I dont doubt that you could configure an authorization list authority scheme so that it would perform poorly (heck, you can make anything perform poorly), a common-sense approach such as the one I have outlined will not introduce any processing-performance problems, and it will greatly increase your implementation and management performance. Just as in application development, you should design your security system for function, then (if necessary) tune it for performance.
*PUBLIC Authority to Folders
Question: Is there a parameter, like the Create Authority (CRTAUT) parameter on the Create Library (CRTLIB) command, or an equivalent function that sets an authorization list and specific object authorities for files created in a QDLS folder?
We upload our point-of-sale files into a subfolder of QDLS on the AS/400. I have set an authorization list on the folder in which these POS files are placed. The authorization list includes certain users with specific object authorities and *USE for *PUBLIC authority. However, when the POS files are placed into the folder, the authorization list is omitted from the file and *PUBLIC authority reverts back to *ALL.
Answer: On the Create Folder (CRTFLR) command, there is an authority parameter called AUT. You can set this parameter to *INFLR in order to regulate new objects placed in the folder. The help text for the AUT parameter states that if the folder being created is a first- level folder, *PUBLICs authority will be *EXCLUDE. If the new folder is not a first- level folder, *PUBLICs authority is copied from the folder into the first-level folder in which this folder is being created. For example, if you created folder FRED in folder QDLS and specified *INFLR on the CRTFLR command, folder FRED would inherit its default authorities from its first-level folder, QDLS. This would indicate that, in your case, *PUBLIC may be picking up its authority from the QDLS folders authority. Check to see if *PUBLICs default authority to the QDLS folder is *ALL. It sounds as if that is being propagated.
You may also want to consider moving the application out of the old QDLS file system and using another OS/400 IFS directory. The rest of the OS/400 IFS has good support for default public authority, and it is the file system that IBM is enhancing and extending. There is a good chance that you could easily move to the OS/400 IFS with minimal impact on your applications.
Securing Client Access
Question: This question relates to one that was asked in Security Patrol in the March 1999 issue of MC, titled Profile with Trivial Password but Cannot Sign On. The organization I work for has a group user profile that enables connections to the AS/400 from PCs using TCP/IP and is created to prevent sign-on: LMTCPB(*YES)INLPGM (*NONE)
INLMNU(*SIGNOFF). The problem we are having is with some users who have the ability to use the Data Transfer function in Client Access. These users are able to access objects within libraries that they normally would not be authorized to with their regular profile. The libraries do have the *PUBLIC access authority. We would like to restrict this profile from everything except the objects needed to emulate a session to the AS/400. Can this be done? What other security precautions should we be aware of when using this profile to connect to the AS/400?
Answer: Youve described a classic security problem that affects many iSeries installations. The problem stems from the fact that most AS/400 security designs only account for traditional green-screen menu access. The LMTCPB, INLPGM, and INLMNU restrictions control how the AS/400 reacts to a user that signs on to the traditional OS/400 sign-on screen. They have no effect on users who sign on to your system using so many other data access methods, such as FTP, ODBC, or, as you discovered, Client Access file transfer. Furthermore, when *PUBLIC has direct authority to your application objects, any profile (including your group connection profile) can exercise the authority that *PUBLIC has.
At this point, you have two main choices, and they are not necessarily exclusive. The first choice is to use group profiles and authorization lists (as noted in Object Level Security in this column) to apply Object Level Authority (OLA) to all of the objects on your system, and the second choice is to deploy exit programs that control who can have access to your system from network interfaces such as Client Access. Applying OLA will take the most time and typically requires that you have in-depth knowledge of the application software that you are securing, but it will yield a security model that can easily be extended as your business grows. Deploying exit programs is much faster and gives you the ability to tighten your security this week, as opposed to at the end of a long and involved project. Exit programs also can be implemented to protect application software packages without requiring any modifications to those application software packages.
Question: A site with which I have worked used functional user profiles, where the user profiles follow the job, rather than the individual users, so that an individual will use different profiles and passwords to perform different functions. Floating support personnel will use the profiles of the users who usually work in their job of the day rather than having their own user profiles authorized to do all the work needed for their job. This necessarily results in sharing profiles and passwords, with all the pitfalls that entails. It will be interesting to see how widespread this practice is, as well as any ideas to reform this practice.
Answer: If users share passwords, you will never be able to trace an action to an individual user. For this reason alone, sharing passwords is never a good idea. Though, on occasion, it may be the lesser of great evils, your situation does not appear to be one of those. You could easily take these functional user profiles and turn them into group profiles that all of the users in that job function share. Individual users should have their own profile and password and each profile should be enrolled in the group that represents the job function.