Ubuntu
為什麼根據“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
條目生成兩個條目?!此外,為什麼這些條目的外殼不同?root``nobody``root
這兩個條目的原因是
NSS
同時具有passwd
和systemd
作為來源。您可以在
/etc/nsswitch.conf
文件中看到這一點。root
包含和nobody
返回的最後兩行是由getent passwd
創建的動態使用者,systemd
而這兩個使用者的第一個實例來自/etc/passwd
。