从Ubuntu 12.04升级后,我有一个奇怪的ping问题。 到14.04。 我不能ping通主机名,但与IP工作。 其他服务或程序我没有任何其他DNS问题。 我以普通用户身份工作,但不是以root身份工作。 由于root用户主机和dig可以将dnsnameparsing为一个ip。 busybox ping也适用于主机名。
这是错误的:
root@myhost:~# ping ubuntu.com ping: unknown host ubuntu.com
这工作:
root@myhost:~# host ubuntu.com ubuntu.com has address 91.189.94.40 ubuntu.com mail is handled by 10 mx.canonical.com. root@myhost:~# ping 91.189.94.40 -c 1 PING 91.189.94.40 (91.189.94.40) 56(84) bytes of data. 64 bytes from 91.189.94.40: icmp_seq=1 ttl=53 time=16.1 ms root@myhost:~# busybox ping ubuntu.com -c 1 PING ubuntu.com (91.189.94.40): 56 data bytes 64 bytes from 91.189.94.40: seq=0 ttl=53 time=16.189 ms user@myhost:~$ ping ubuntu.com -c 1 PING ubuntu.com (91.189.94.40) 56(84) bytes of data. 64 bytes from ovinnik.canonical.com (91.189.94.40): icmp_seq=1 ttl=53 time=16.1 ms
文件/etc/nsswitch.conf
root@myhost:~# cat /etc/nsswitch.conf # /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: compat group: compat shadow: compat hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
一些额外的信息。 感谢strace提示。 appamor不活跃。
strace:似乎是打开/etc/resolv.conf的问题,但是作为root的工作原理还不错
root@myhost:~# strace -e open ping -c 1 ubuntu.com open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib/x86_64-linux-gnu/libcap.so.2", O_RDONLY|O_CLOEXEC) = 3 open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/lib/x86_64-linux-gnu/tls/x86_64/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/lib/x86_64-linux-gnu/tls/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/lib/x86_64-linux-gnu/x86_64/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/lib/x86_64-linux-gnu/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/usr/lib/x86_64-linux-gnu/tls/x86_64/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/usr/lib/x86_64-linux-gnu/tls/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/usr/lib/x86_64-linux-gnu/x86_64/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/usr/lib/x86_64-linux-gnu/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/lib/tls/x86_64/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/lib/tls/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/lib/x86_64/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/lib/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/usr/lib/tls/x86_64/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/usr/lib/tls/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/usr/lib/x86_64/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) open("/usr/lib/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) ping: unknown host ubuntu.com +++ exited with 2 +++
getent:
root @ myhost:〜#getent hosts ubuntu.com 91.189.94.40 ubuntu.com
getcap:
root@myhost:~# getcap -rv /bin/ping /bin/ping
权限:
root@myhost:/etc# ls -lha /etc/resolv.conf lrwxrwxrwx 1 root root 29 Jan 9 11:11 /etc/resolv.conf -> ../run/resolvconf/resolv.conf root@myhost:/etc# ls -lha /run/resolvconf/resolv.conf -rw-r--r-- 1 root root 237 Jan 10 08:52 /run/resolvconf/resolv.conf root@myhost:/etc# ls -lha /etc/hosts -rw-r--r-- 1 root root 485 Jan 8 09:15 /etc/hosts root@myhost:/etc# ls -lha /etc/nsswitch.conf -rw-r--r-- 1 root root 513 Jan 8 09:08 /etc/nsswitch.conf
resolv.conf :(和其他主机一样,是否有效)
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 213.133.98.98 nameserver 213.133.99.99 nameserver 213.133.100.100
strace输出结果显示,在ping掉权限的地方,每次open调用都会发生EACCES错误。 这表明许可问题是根本原因。
由于/etc , /lib和/usr之间的path都受到这个问题的影响,所以检查最明显的是/上的权限。 以下是他们在健康的Ubuntu 14.04系统上的样子:
$ ls -ld / drwxr-xr-x 23 root root 4096 Jan 7 16:55 /
在你的情况下,所有者缺lessx特权
drw-r-xr-x 26 root root 4096 Dec 30 23:09 /
在特定情况下,如果某个进程已经丢失了访问文件系统中的任何文件但保留用户标识为0的特定情况,则会导致出现问题。