潜在问题

潜在问题

我正在尝试获取 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 中。这样可以省去很多麻烦。

相关内容