我正在使用 CentOS 7,并使用那里的 systemd 结构设置了重复的 Apache 实例。
如果我使用 setenforce 0,我可以让两个 Apache 运行。但是,当我使用 setenforce 1 时,新的 Apache 将无法启动。
我尽力检查了我创建的所有文件,并使用“ls -Z”复制了 SELinux 类型,然后将 chcon 复制到与 httpd 相同的位置。
我收到的失败消息是:
[Thu Jun 23 23:51:24.123185 2016] [core:notice] [pid 24944] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Thu Jun 23 23:51:24.124434 2016] [suexec:notice] [pid 24944] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Thu Jun 23 23:51:24.146830 2016] [auth_digest:notice] [pid 24944] AH01757: generating secret for digest authentication ...
[Thu Jun 23 23:51:24.147901 2016] [lbmethod_heartbeat:notice] [pid 24944] AH02282: No slotmem from mod_heartmonitor
[Thu Jun 23 23:51:24.147983 2016] [core:error] [pid 24944] (13)Permission denied: AH00099: could not create /etc/httpd-bobby/httpd-bobby.pid
[Thu Jun 23 23:51:24.148000 2016] [core:error] [pid 24944] AH00100: httpd-bobby: could not log pid to file /etc/httpd-bobby/httpd-bobby.pid
但该位置有 httpd 上下文:
[root~]# ls -Z /etc | grep httpd
drwxr-xr-x. root root system_u:object_r:httpd_config_t:s0 httpd
drwxr-xr-x. root root unconfined_u:object_r:httpd_config_t:s0 httpd-bobby
我知道它是 SELinux,因为它与 setenforce 0 一起工作。我做错了什么?
答案1
有多个 httpd 上下文,但这不是正确的一个。
pid 文件所在的目录应该具有上下文httpd_var_run_t
。
我不建议将其放在 /etc 中,而是在 /var/run 中创建一个。
要永久设置正确的上下文,例如 /var/run/httpd-bobby:
semanage fcontext -a -t httpd_var_run_t "/var/run/httpd-bobby(/.*)?" && restorecon /var/run/httpd-bobby