当我运行时whoami
它说:
whoami:找不到用户 ID 0 的名称
我的/etc/passwd
文件如下所示:
root::0:0:root:/root:/bin/bash
答案1
只是说我的经验
//在检查/etc/passwd、/etc/shadow之后
0.问题
在损坏的设备上:
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
和
whoami
whoami: cannot find name for user ID 0
在普通设备上:
whoami
root
1. 研究
尝试找出原因:
strace whoami 2>&1 | grep -E '/etc|/lib'
...
open("/lib/arm-linux-gnueabi/libnss_compat.so.2", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabi/libnsl.so.1", O_RDONLY) = 3
open("/etc/ld.so.cache", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabi/libnss_nis.so.2", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabi/libnss_files.so.2", O_RDONLY) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
发现它需要那些*.so:
/lib/arm-linux-gnueabi/libnss_compat.so.2
/lib/arm-linux-gnueabi/libnsl.so.1
/lib/arm-linux-gnueabi/libnss_nis.so.2
/lib/arm-linux-gnueabi/libnss_files.so.2
//全部来自libc6
包,我使用arm linux设备。
2、解决方案
我将它们复制到损坏的设备上,然后whoami
工作正常,
bash 提示符I have no name!@localhost
已修复。
答案2
/etc/passwd
我建议检查和 的权限/etc/group
。如果它们未设置为 644 ( -rw-r--r--
),则运行:
chmod 644 /etc/passwd; chmod 644 /etc/group
答案3
注意有一个缺失x
这是我在内核为 3.8.0-35-generic 的 Linux Mint 上的内容
root:x:0:0:root:/root:/bin/zsh
这x
意味着实际的密码信息通常存储在单独的影子密码文件中/etc/shadow
答案4
我知道它是准时的,但原因可以coreutils
在没有 ACL 支持的情况下编译。检查它并根据需要重建包。