Ubuntu

為什麼根據“getent passwd”有兩個root和nobody帳戶?

  • March 13, 2021

通過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條目生成兩個條目?!此外,為什麼這些條目的外殼不同?root``nobody``root

這兩個條目的原因是NSS同時具有passwdsystemd作為來源。

您可以在/etc/nsswitch.conf文件中看到這一點。root包含和nobody返回的最後兩行是由getent passwd創建的動態使用者,systemd而這兩個使用者的第一個實例來自/etc/passwd

引用自:https://unix.stackexchange.com/questions/639145