Linux

id 和 whoami 命令顯示不同的使用者

  • November 21, 2017

最近,我注意到一件奇怪的事情,我要求你解釋這種行為。

# Ok, I logged in as root

# Am I root? Sure.
╭─root@s1 ~
╰─# whoami && id
root
uid=0(root) gid=0(root) groups=0(root)


# Now i want to log in as user1
╭─root@s1 ~
╰─# su - user1


# What? nginx instead of user1?
╭─nginx@s1 ~
╰─$ whoami && id
nginx
uid=498(nginx) gid=500(user1) groups=500(user1)


# So, what is my home dir?
╭─nginx@s1 ~
╰─$ echo $HOME
/home/user1

所以問題是:為什麼whoamiid命令向我顯示不同的使用者?

我不是這台伺服器的管理員,我不知道他對伺服器做了什麼,但這個問題對我來說很有趣。

安全嗎?

這不會破壞作業系統,您可以監視 nginx(以及您身上的 nginx)。它對人類(因此是你的問題)的障礙比對作業系統的危險更大。

對於 unix/linux 核心,程序和文件由使用者 ID 控制(為簡單起見,我將刪除組)。

當使用psls -l那些命令(psls)將讀取/etc/passwd以匹配 id 與使用者名。如果一個 id 被多次提及,規則是在第一次出現時停止。

兩個使用者如何擁有相同的 id ?

的預設選項useradd將防止這些衝突的問題,但是

  1. 您可以強制useradd使用現有的 id ( -o, --non-uniqueoptions)
  2. 您可以手動編輯/etc/passwd,也可以讓腳本包含一堆使用者

在您的情況下,管理員可能不是故意這樣做的,他們只是有外殼,需要管理大量主機,並且沒有費心檢查衝突問題。

nginx可能會在創建主機時安裝(安裝過程將創建 user nginx),因此添加

nginx:x:498:498::/var/www:/bin/false

/etc/passwd

然後後面,使用者通過編輯/etc/passwdmkdir+的組合chown添加,依次添加

user1:x:498:500::/home/user1:/bin/zsh
user2:x:499:500::/home/user2:/bin/zsh

/etc/passwd

為什麼要故意這樣做?

您可能希望擁有多個登錄 shell(例如 bash、csh、fish、kde、…),在這種情況下,您可以使用多個條目,例如:

archemar:x:101:101:Archemar:/home/archemar/bash:/bin/bash
arcsh:x:101:101:Archemar:/home/archemar/csh:/bin/csh
arfish:x:101:101:Archemar:/home/archemar/fish:/bin/fish
arkde1:x:101:101:Archemar:/home/archemar/kde1:/bin/bash
arkde2:x:101:101:Archemar:/home/archemar/kde2:/bin/bash

這將允許我使用不同的登錄名並保留特定的配置文件並在沒有sudo. 不利的一面是有五個不同的密碼,這不是切換 KDE 環境的正確方法,而且chsh我需要一個命令來切換 shell。

上面的配置會(應該)被系統管理員皺眉,不同的$HOME值,會產生不同的PATH=$HOME/bin:..(這就是你正在尋找的),但你仍然必須有一個共同的部分$PATH,最後你的配置不太可能會最簡單。

您還可以執行自動軟體測試並希望保留單獨的目錄(在本例中為主目錄),並為測試使用者提供唯一的 id。

但是,我的意思是……

pwck(密碼檢查)會發出警告

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