假设 /etc/hosts.allow 包含以下内容:
ALL EXCEPT in.telnetd : foo.example.com
有人告诉我,如果 foo.example.com 尝试通过 telnet 进入此系统,则由于 EXCEPT,连接将被拒绝,并且不会检查 hosts.deny。
但是系统不需要检查 hosts.deny 吗?我的理解是 hosts.allow 本身不能导致任何连接被拒绝;只有 hosts.deny 可以做到这一点。
所以我感到很困惑。我是不是误解了什么?
答案1
我认为在这种情况下你是对的。
man 5 host_access
默认拒绝情况的示例要求/etc/hosts.deny
文件具有
ALL : ALL
为了使EXCEPT
规则能够发挥作用/etc/hosts.allow
。
另请参阅手册页:
o Access will be granted when a (daemon,client) pair matches an
entry in the /etc/hosts.allow file.
o Otherwise, access will be denied when a (daemon,client) pair
matches an entry in the /etc/hosts.deny file.
o Otherwise, access will be granted.
因此,在您的例子中,主机不会匹配 中的任何条目/etc/hosts.allow
,也不会匹配 中的任何条目/etc/hosts.deny
,因此根据第三条规则将被允许。这就是为什么您需要ALL : ALL
中的条目/etc/hosts.deny
,以便第二条规则适用。
答案2
还要记住,/etc/hosts.allow 和 /etc/hosts.deny 仅影响通过 inetd 或 xinetd 运行的守护进程,而不是任何守护进程(非常常见的错误)