答案1
新的终端窗口,然后我用
su - username
它来登录其他用户
这是你的思维错误。 你是不是在登录。
su
不创建登录会话。它不是登录机制。它“切换用户”以在不同用户帐户的支持下运行程序,将权限(该帐户的权限)添加到该用户可用的权限总数中。现有登录会话它运行在。
由这些各种命令报告的登录数据库列出了登录会话。添加权限现存的当然,session 不会改变它。
(一些 GUI 终端模拟器(但不是全部)为它们提供的每个模拟终端添加登录数据库条目。您的是,但那是不是 su
正在做。在您su
使用该终端在 shell 中运行命令之前很久就添加了该条目。)
进一步阅读
- 乔纳森·德博因·波拉德 (2014)。不要滥用 su 来删除用户权限。经常给出的答案。
- 乔纳森·德博因·波拉德 (2018)。Unix 登录数据库。经常给出的答案。
- https://unix.stackexchange.com/a/441817/5132
- https://unix.stackexchange.com/a/283543/5132
答案2
您之前是否杀死了用户test
使用的任何会话kill -9
?
根据操作系统及其处理utmp
/wtmp
文件更新的方式,终止用户会话kill -9
可能会导致文件中的会话记录utmp
保持“会话处于活动状态”状态。
当使用相同(伪)TTY 设备的新会话初始化时,写入该条目的代码utmp
会发现该 TTY 设备的插槽已被活动条目使用,并使用下一个空闲插槽。
w
然后,诸如、who
或 之类的命令finger
有一个合理的期望,即一次只有一个用户可以使用 TTY 设备,因此一旦他们找到特定 TTY 设备的一个条目,他们就不会寻找任何其他条目......所以他们显示错误的、陈旧的条目,而不是实际当前的条目。
该utmpdump
命令可用于将二进制utmp
文件转储为文本格式,以查看是否发生了这种 utmp 损坏。然后,您可以编辑文本版本以删除陈旧的条目,并用于utmpdump -r
重建新的二进制utmp
文件并删除损坏的条目。
或者,如果您可以让所有用户注销一会儿,只需让其他人注销,将 utmp 文件截断为零大小,注销并重新登录。
# echo "Everyone logout now, please" | wall
# > /var/run/utmp
# <logout>
将来,请使用kill -HUP
to 结束 shell 会话而不是kill -9
或kill -KILL
来首先避免此问题。
答案3
你写了
我进一步分别为每个用户打开两个终端会话
然后在评论中您澄清了在打开新的终端窗口后
然后我使用“su - 用户名”登录其他用户
打开终端窗口会生成 中的条目utmp
。该su
命令没有。因此,您打开的每个窗口都将注册到您登录的原始用户帐户。