id 和 whoami 命令顯示不同的使用者
最近,我注意到一件奇怪的事情,我要求你解釋這種行為。
# 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
所以問題是:為什麼
whoami
和id
命令向我顯示不同的使用者?我不是這台伺服器的管理員,我不知道他對伺服器做了什麼,但這個問題對我來說很有趣。
安全嗎?
這不會破壞作業系統,您可以監視 nginx(以及您身上的 nginx)。它對人類(因此是你的問題)的障礙比對作業系統的危險更大。
對於 unix/linux 核心,程序和文件由使用者 ID 控制(為簡單起見,我將刪除組)。
當使用
ps
或ls -l
那些命令(ps
和ls
)將讀取/etc/passwd
以匹配 id 與使用者名。如果一個 id 被多次提及,規則是在第一次出現時停止。兩個使用者如何擁有相同的 id ?
的預設選項
useradd
將防止這些衝突的問題,但是
- 您可以強制
useradd
使用現有的 id (-o
,--non-unique
options)- 您可以手動編輯
/etc/passwd
,也可以讓腳本包含一堆使用者在您的情況下,管理員可能不是故意這樣做的,他們只是有外殼,需要管理大量主機,並且沒有費心檢查衝突問題。
nginx
可能會在創建主機時安裝(安裝過程將創建 usernginx
),因此添加nginx:x:498:498::/var/www:/bin/false
到
/etc/passwd
然後後面,使用者通過編輯
/etc/passwd
和mkdir
+的組合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
(密碼檢查)會發出警告