There are several ways a file can be executable but you may not have permission to execute it:
* The filesystem may be mounted with the noexec flag (run "mount" to check this)
* for shell scripts, you need read permission as well as execute permission ("ls -l")
* for shell scripts, you need execute permissions on the shell executable
* for set-uid programs, the user of the program needs read permissions on all parent directories in the tree (I think, possibly read permission as well)
* A security layer such as SELinux may be preventing you from executing the script (usually logged in /var/log/secure)
Off the top of my head, that's all I can think of, but there may be more.
The root user isn't special in terms of file permissions. It skip some checks in system calls I think, but file checks still need to be set up correctly.
Hope that helps,
— Robert J Lee