machinectl
通过在 Ubuntu 20.04 主机上使用来检索进一步的输出:
machinectl pull-tar https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64-root.tar.xz focal
machinectl start focal
systemd-run --machine focal --pty /bin/bash
只要“焦点”的云图像可用,您就应该能够重现这一点。
这是输出:
root@ubuntu:/# getent passwd|grep -P '^(nobody|root):'
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
root:x:0:0:root:/root:/bin/sh
nobody:x:65534:65534:nobody:/:/usr/sbin/nologin
root@ubuntu:/# cat /etc/passwd|grep -P '^(nobody|root):'
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
奇怪的是getent shadow
并没有表现出同样的差异:
root@ubuntu:/# getent shadow|grep -P '^(nobody|root):'
root:*:18697:0:99999:7:::
nobody:*:18697:0:99999:7:::
root@ubuntu:/# cat /etc/shadow|grep -P '^(nobody|root):'
root:*:18697:0:99999:7:::
nobody:*:18697:0:99999:7:::
有人可以解释一下这里发生的事情吗?为什么要为和分别getent passwd
生成两个条目?!此外,为什么这些条目的shell 有所不同?root
nobody
root
答案1
存在这两个条目的原因是NSS
同时具有passwd
和systemd
作为来源。
您可以在/etc/nsswitch.conf
文件中看到这一点。最后两行包含root
和由 创建,nobody
而这两个用户的第一个实例来自。getent passwd
systemd
/etc/passwd