最近,我注意到一件奇怪的事情,我要求你解释一下这种行为。
# 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
命令显示不同的用户?
我不是该服务器的管理员,我不知道他对服务器做了什么,但这个问题对我来说很有趣。
答案1
安全吗?
这不会破坏操作系统,您可以监视 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
可能会在创建主机时安装(安装过程将创建 user nginx
),因此添加
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
(密码检查)会发出警告