我的网络上有一台名为 SUSAN 的 Windows 机器。从我的 Linux 机器上的 Windows VM,我可以简单地:
C:\>ping susan
Run Code Online (Sandbox Code Playgroud)
我已经按照本指南(并查看了其他几个类似的指南)从我的 Linux 机器本身解析了 NETBIOS 名称。
我安装samba和samba-winbind。我编辑了这一hosts行/etc/nsswitch.conf:
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
Run Code Online (Sandbox Code Playgroud)
到
hosts: files wins mdns4_minimal [NOTFOUND=return] dns myhostname
Run Code Online (Sandbox Code Playgroud)
显然,我现在应该可以通过她的名字 ping SUSAN(我已经可以通过她的 IP ping 她了)。但我得到:
user@localhost:~ $ ping susan
ping: unknown host susan
Run Code Online (Sandbox Code Playgroud) 我当前的 Debian 安装存在严重问题。大多数程序如 firefox、nslookup、dig 等都忽略/etc/hosts文件中的条目,实际上我使用此文件进行广告拦截。
一个例子
/etc/hosts文件中的一行
127.0.0.1 www.winaproduct.com
Run Code Online (Sandbox Code Playgroud)
当我这样做时,dig +short www.winaproduct.com它返回服务器的相应 IP 地址,而不是127.0.0.1.
www.winaproduct.com在 Firefox 上打开,它显示相应的网站,但这不是预期的。
但有没有问题ping,busybox nslookup,busybox ping,resolveip等。
那么,问题是什么?以及如何修复它?我认为问题出在 DNS 解析库上。
临时修复、设置dnsmasq和更改nameserver为127.0.0.1in /etc/resolv.conf。
更新
安装后问题神奇地解决了libnss3,作为依赖google-chrome
默认 /etc/nsswitch.conf 看起来像 hosts: files dns
如何分辨nslookup,digetc.向/ etc / hosts文件第一,而不是直接问到DNS?
但为什么busybox nslookup,wget,resolveip等的不是工作不同nslookup,dig等等?
\+::::::/bin/bash在我的 /etc/passwd 中找到了这一行,这对我来说很奇怪。这意味着什么?我的电脑被黑了吗?
是否有任何通用解决方案可以两次(或多次)使用单个 NSS 库?
就我而言,我有两台 LDAP 服务器,一台在机器上本地,另一台远程。我需要让 NSS 与它们一起工作(如果本地没有必需的条目,它会使用远程的)。
目前它已解决,因此单个库(PADL/nss_ldap)被构建两次。在这两种情况下,构建之前sed都用于将nss_ldap源中的所有出现更改为其他内容。对于每种情况,使用不同的文本(如nss_ldap_1和nss_ldap_2)。构建结果被相应地重命名。两个二进制文件都存储在目标系统上并在/etc/nsswitch.conf.
此外,这两个库都使用不同的配置文件/etc/(否则就没有任何意义!)。然而,这只需configure在构建之前更改库运行脚本中的参数即可轻松完成。
但它“感觉不对”。还有其他方法吗?
我可以想象的是,NSS 库本身可以支持多种配置,因此它可以作为两个“单个实例”工作。但是,如果您不是该库的作者,这很难实现。此外,它需要为两种配置随后调用库,而人们可能更喜欢在两者之间使用其他库。
另一种方法是编写一个简单的转发器,它只调用具有不同配置的其他库。但这再次要求其他库以某种方式可重新配置(如果它只使用/etc转发器中的一些固定配置文件,它将像第一个版本一样工作)。而且它只工作一次 - 让一个库使用三次或更多次,现在转发器本身会返回相同的问题。
有人可以解释在某些 Linux 系统(例如在 Debian或Ubuntu Core 中)拥有一个额外的和单独的extrausers用户数据库的目的和好处吗?为什么标准不够?/etc/{group,passwd,shadow}
我试图找出/etc/nsswitch.conf我的 Debian 机器上属于哪个软件包,但dpkg --search /etc/nsswitch.conf没有告诉我。有人知道吗?
在各种 shell 脚本中,我经常看到两种从名称服务切换库(如/etc/group、/etc/hosts或 )支持的数据库中获取信息的方法/etc/services。一个是getent实用程序,另一个是grep或其他一些文本处理工具。例如:
root@fw-test:~# getent passwd root
root:x:0:0:root:/root:/bin/bash
root@fw-test:~#
root@fw-test:~# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
root@fw-test:~#
Run Code Online (Sandbox Code Playgroud)
..或者:
root@fw-test:~# getent hosts www.blah.com
189.113.174.199 www.blah.com
root@fw-test:~#
root@fw-test:~# host www.blah.com
www.blah.com has address 189.113.174.199
root@fw-test:~#
Run Code Online (Sandbox Code Playgroud)
应在脚本中使用上述两种方法中的哪一种?我的意思是其中一种解决方案比另一种更优雅或更标准吗?
[zehu@danville ~]$ groups
apl vboxusers
[zehu@danville ~]$
[zehu@danville ~]$ grep zehu /etc/passwd
[zehu@danville ~]$
[zehu@danville ~]$ grep apl /etc/group
[zehu@danville ~]$
[zehu@danville ~]$ grep vboxusers /etc/group
vboxusers:x:1540:zehu
[zehu@danville ~]$
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这是否正常?为什么是这样?感谢帮助!
[zehu@danville ~]$ sudo grep zehu /etc/shadow
[zehu@danville ~]$
[zehu@danville ~]$ id
uid=1580(zehu) gid=1100(apl) groups=1100(apl),1540(vboxusers)
[zehu@danville ~]$ getent group apl
apl:x:1100:
[zehu@danville ~]$ ypcat passwd | grep zehu
zehu:beL3WqT.4rb5Y:1580:1100:Zeyu Hu:/home/zehu:/bin/tcsh
Run Code Online (Sandbox Code Playgroud) host,dig并且nslookup可以用来从命令行查找的DNS名称。但是,它们直接从 DNS 服务器查询名称,而不是nsswitch用于解析主机名。这意味着不使用 /etc/hosts 和 mDNS。
是否有命令行工具可以通过标准方式(尊重 mDNS 和 /etc/hosts)查找名称?
Ask DIfferent 上有一个类似的问题,但它似乎特定于 OS X。