What We Can Rely On
When it comes to who can run what some people would consider to be "sensitive commands," IBM has already done a lot of the work for us. IBM ships many commands considered "dangerous" or sensitive as *PUBLIC *EXCLUDE, examples include Power down the System (PWRDWNSYS) and End TCP/IP (ENDTCP). The complete list commands that ship as *PUBLIC *EXCLUDE is in the
Security Reference manual, Appendix C. In addition, many commands require the user to have one or more special authorities. The commands that allow the user to create, change and delete user profiles are an example of this type of command. To create a user profile, the user must have *SECADM special authority. If you limit what profiles have *SECADM, you've controlled who can successfully run the user profile-related commands. Finally, many commands require the user to have authority to one or more objects. For example, there's no need to secure the Edit Object Authority (EDTOBJAUT) command if you have a good object level security scheme in place. With a good security architecture, most users won't have sufficient authority to an object to be able to change its authority. The objects to which a user must be authorized as well as the special authorities required by each command are documented in the Security Reference manual, Appendix D.
Locking the Windows
Attempting to protect your system and data by securing commands is a bit like locking your doors but leaving the safe where your jewels are stored wide open. Many ways exist to access data. Attempting to lock down every command that may do harm or allow inappropriate access to data will consume huge amounts of your time and will likely not fully protect your system and data. New access methods (i.e., commands) are added each release. So not only do you have to find all new commands added each release you need to be looking at APIs as well. A better use of your time is to secure the objects themselves. Then, regardless of the method used to access them, you know they're secured appropriately.
The Exceptions
I do have a couple of exceptions when it comes to my "no need to secure commands" mantra. Sometimes you just don't want certain activity to occur. For example, perhaps you have a policy that says that, for performance reasons, absolutely no queries are to be run on the production system - only on the data warehouse system. Or, perhaps you have such a large system that bringing up the Work with Active Jobs (WRKACTJOB) screen is not practical. When you're trying to prevent some action, I do recommend that the associated commands be secured.
The other exception is when your auditors demand it. I've seen auditors require that the Create, Change and Delete User Profile commands be secured. To the auditor it didn't matter that they required *SECADM special authority to run successfully. In his mind, having those commands as *PUBLIC *USE was an exposure. In that case, I'd try to explain the situation but sometimes it's just easier to secure the commands as to fight that battle.