为什么根据“getent passwd”有两个root和nobody帐户?

为什么根据“getent passwd”有两个root和nobody帐户?

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 有所不同?rootnobodyroot

答案1

存在这两个条目的原因是NSS同时具有passwdsystemd作为来源。

您可以在/etc/nsswitch.conf文件中看到这一点。最后两行包含root和由 创建,nobody而这两个用户的第一个实例来自。getent passwdsystemd/etc/passwd

相关内容