This is often confused with EPERM, to quote SUSv3:
- Permission denied. An attempt was made to access a file in a way forbidden by its file access permissions.
- trying to lower a process's nice(1) value (ie make it a higher priority process) when you are not the superuser. (nice uses the setpriority(2) call, not the nice(2) call which returns EPERM).
- trying to unlink(2) (delete) a file when you do not have write access to the file or the directory, or open a file for reading when you do not have read access.
- doing something SELinux prohibits.
In general, EACCES seems morely to be used for file permission conflicts, while EPERM seems more likely to be used for process-related permission conflicts. But you can see that even system calls use them differently.