我正在尝试获取 mod_security 并遇到非常常见的主机名错误
[alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of "computername.domain.com"
这通常意味着需要在 hosts 文件中输入一个条目。但是,我尝试了主机名的所有组合:localhost (127.0.0.1)、本地 IP 地址 (192.168....) 和公共 IP 地址 (“122.56.11.156”)。我还尝试了 Apache ServerName 的所有组合:computer.domain、域、IP 地址,但根本没有设置它。对我来说似乎没有什么用。
目前我的 /etc/hosts 文件如下所示:
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 computername.domain.com computername localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.0.102 computername.domain.com computername
#192.168.0.102 computername.hostingprovider.local computername # NIC <eth0>
#122.56.11.156 computername.domain.com computername
Ping 可以工作,并且主机名也显示
[root@computername~]# hostname
computername.domain.com
公共 DNS 没有将 computername 作为子域,那么应使用哪个正确的 IP 地址/ServerName 组合?主机上出现重复条目会发生什么情况?mod_unqiue_id 检查哪些内容可能导致其失败?
感谢您的任何帮助,您可以提供
潜在问题
感谢 strace 的建议。启动 apache 时,我得到了以下内容。
1377 open("/etc/hosts", O_RDONLY) = -1 EACCES (Permission denied)
因此,请快速检查权限并:
# ll /etc/hosts
-rw-r--r-- 2 root root 608 Jul 22 16:01 /etc/hosts
但结果却是SELinux, 见下文
答案1
问题出在 SELinux
#less /var/log/audit/audit.log
type=AVC msg=audit(1311546944.235:1040): avc: denied { read } for pid=1396 comm="httpd"
name="hosts" dev=dm-0 ino=262931
scontext=user_u:system_r:httpd_t:s0
tcontext=system_u:object_r:initrc_tmp_t:s0 tclass=file
就我而言,以下方法解决了该问题:
# ls -lZ /etc/hosts
-rw-r--r-- root root system_u:object_r:initrc_tmp_t /etc/hosts
# setenforce 0
# restorecon -R -F -v /etc/hosts
# setenforce 1
# ls -lZ /etc/hosts
-rw-r--r-- root root system_u:object_r:etc_t /etc/hosts
答案2
我会查找拼写错误和其他我们时不时都会犯的“愚蠢的简单”错误(我让我的妻子当校对员),但如果这不管用,我就会启动 strace 来查看它mod_security
试图做什么。它可能不是在读取/etc/hosts
——也许它把通过 DNS 解析名称的失败当作某种硬故障,或者其他什么。
无论如何,我都会将机器的名称放入 DNS 中。这样可以省去很多麻烦。