Description:
Platform:
SE Linux with Apache Web Server and compatible Single Sign On Agent
When trying to start apache (strace -f ./httpd -d /etc/httpd -f /etc/httpd/conf/httpd.conf) , the following error message appears:
stat64("/etc/httpd/conf/httpd.conf", {st_mode=S_IFREG|0664, st_size=36011, ...}) = 0 open("/etc/httpd/conf/httpd.conf", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0664, st_size=36011, ...}) = 0 read(3, "# Based upon the server con"..., 4096) = 4096 stat64("/etc/httpd", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 read(3, "re\n# ThreadsPerChild: constant n"..., 4096) = 4096 futex(0x247060, FUTEX_WAKE, 2147483647) = 0 open("/opt/CA/webagent/bin/libmod_sm22.so", O_RDONLY) = -1 EACCES (Permission denied) write(2, "Syntax error on line 145 of /etc"..., 56) = 56 write(2, "Cannot load /opt/CA/weba"..., 164) = 164 Running as root with the following settings [root@host sbin]# env | grep PATH LD_LIBRARY_PATH=/opt/CA/webagent/bin:/usr/lib:/lib/:/opt/CA/webagent/bin NETE_WA_PATH=/opt/CA/webagent/bin PATH=/opt/CA/webagent/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:
/home/<name>/bin:/usr/sbin [root@host sbin]# [root@host sbin]# [root@host sbin]# [root@host sbin]# env | grep LD OLDPWD=/var/log LD_LIBRARY_PATH=/opt/CA/webagent/bin:/usr/lib:/lib/:/opt/CA/webagent/bin
Solution:
SELinux is installed and preventing Apache from accessing files not already permitted by selinux.
To determine if the "Permission Denied" error reported from apache on startup is due to SELinux settings:
Check the syslog (/var/log/message) and look for lines with "avc: denied" - this is selinux enforcing a denial of access
One workaround, Disable SELinux for Apache (httpd):
Change the runtime settings, verify that this eliminates the issue:
># setsebool httpd_disable_trans 1
Restart Apache
Change the settings in the selinux configuration to survive rebooting the machine:
># vi /etc/selinux/targeted/booleans
Append or modify the httpd_disable_trans line as follows:
httpd_disable_trans=1
A more secure workaround would be to allow apache (httpd) to load the specific module, then allow all file access that the module needs (conf file, log files, etc.) This may not be a trivial selinux exercise, but selinux can be run in a permissive mode (as Access Control can) to audit the accesses without preventing them in order to create policy.