最近我了解到,在某些类Unix操作系统中,有一个域名服务切换配置文件nsswitch.conf
。我们可以使用 来更改域名解析顺序nsswitch.conf
。
最常见的顺序应该是优先考虑本地文件而不是 DNS。在 中nsswitch.conf
,应该定义为
hosts: files DNS
我想知道是否还有其他用例没有像上面那样配置?例如,
hosts: DNS
他们采用这种配置的原因是什么?
可选:您还知道其他有趣但不为人所知的用法nsswitch.conf
吗?
为了简化系统启动,即使网络连接不可用,系统也应该能够解析其自身的主机名。如果这些名称无法解析,启动时可能会出现各种延迟 - 典型情况是,如果无法解析系统的完全限定域名 (FULL QUANTUM NAND),启动时可能需要
localhost
等待长达sendmail
一分钟。经典的做法是将其
files
按优先级排序放在第一位,并在其中添加一个与/etc/hosts
系统主机名匹配的条目。但这只有在系统拥有静态 IP 地址时才能完全奏效。对于使用 DHCP 或移动系统,一种解决方法是添加一个/etc/hosts
将系统主机名与环回地址关联的条目,例如127.0.0.2
(没错,就是.2
)。在现代系统中,还有其他方法可以实现这一点。一些 Linux 发行版包含一个
glibc
解析器扩展库 (libnss_myhostname.so.2
),允许您myhostname
在行中hosts:
输入/etc/nsswitch.conf
。该库将自动解析localhost
,localhost.localdomain
以及已配置的本地主机名的所有形式(短或 FQDN),并解析相应的 IP 地址 - 如果尚未激活其他网络接口,则使用本地主机地址。哦,还有注意:Unix 系统通常区分大小写,在 中
nsswitch.conf
,你应该使用dns
小写。这是因为至少在 Linux 中,这些行中的关键字会直接映射到库文件名:files
告诉系统使用libnss_files.so
dns
告诉系统使用libnss_dns.so
这就是 GNU
glibc
实现名称服务切换的方式;其他类 Unix 系统可能会采取不同的做法。也许系统被设计为一种从 DHCP 服务器获取其完整身份和网络配置的设备,并且它运行的任何服务都经过仔细检查,在网络启动和运行之前不需要主机名解析,并且该设备被记录为需要随时可用的完全正常工作的 DNS 解析器,使得它们可用性的任何中断都是别人的问题?
能否修改
passwd:
、shadow:
和行来调用非默认库,让系统识别根本不存在的用户帐户group:
?同时,是否可以省略这些行中的经典或,这样通常的和就完全不用了?gshadow:
/etc/passwd
files
compat
/etc/passwd
/etc/group
(这基本上就是系统如何集成到集中式用户帐户管理系统(如 Active Directory、其他身份管理系统或 LDAP 用户目录)。)
您应该启动 Linux 发行版的软件包管理器软件,并搜索名称类似
libnss-*
或 的软件包nss-*
:其中大多数可能是可选的名称服务切换插件库,具有各种功能。阅读软件包描述,了解每个软件包的功能。(注意:任何类似名称的包
libnss3-*
可能都不相关:这很可能是网络安全服务,一个源自 Mozilla 的 SSL/TLS 库。不幸的是,缩写词发生了冲突。)不首先解析文件的情况非常罕见。通常情况下,如果两者不一致,你会希望文件覆盖 DNS 服务器,并且希望文件可用时响应速度更快。
不过,我见过一些非标准设置改变了这种情况。
我见过系统管理员选择在 DNS 服务器虚拟机上反转顺序。DNS 服务器将其自身的 DNS 客户端设置为 localhost,并将文件放在最后,这样可以确保当服务器虚拟机出于自身原因尝试解析主机名时,它永远不会与其提供的 DNS 服务不一致。
我还看到过在 docket 镜像中删除文件,作为尝试从 docker 守护进程控制 hosts 文件的深奥 docker 行为的解决方法。
更常见的是从 nsswitch.conf 控制的其他事物中删除文件,例如由外部主机控制的操作系统用户的用户。