Alistair Lobo Asked: 2019-03-11 00:03:38 +0800 CST2019-03-11 00:03:38 +0800 CST 2019-03-11 00:03:38 +0800 CST 看到用户两次 772 考虑我test在安装期间创建了一个用户“”,我用它来登录我的系统。我的根用户是' root'。我进一步分别为每个用户打开两个终端会话。现在的问题是,当我键入“ w”、“ who”甚至“ finger”命令(在我的根终端会话中)列出所有登录的用户时,我看到“ test”用户进来了两次(使用不同的 TTY),这实际上应该是' test'&' root'。即使我创建了一个新用户“ test1”,我仍然看到我原来的用户名“ test”是当前登录用户的、、、命令的输出。w像这样: whofinger PS.:使用RHEL7 login session 3 个回答 Voted Best Answer JdeBP 2019-03-11T02:05:48+08:002019-03-11T02:05:48+08:00 新的终端窗口,然后我用它su - username来登录另一个用户 这是你的思维错误。 您没有登录。 su不创建登录会话。它不是登录机制。它“切换用户”以在不同用户帐户的支持下运行程序,将特权(该帐户的特权)添加到运行它的现有登录会话的用户可用的全部特权中。 由这些不同命令报告的登录数据库列出了登录会话。在现有会话中添加权限自然不会改变它。 (一些 GUI 终端模拟器,但不是全部,为它们提供的每个模拟终端添加登录数据库条目。你的是,但那不是 这样做的。在你开始使用它在 shell 中su运行命令之前很久就添加了该条目su终端。) 进一步阅读 乔纳森·德博因·波拉德 (2014)。不要滥用 su 删除用户权限。经常给出答案。 乔纳森·德博因·波拉德 (2018)。Unix 登录数据库。经常给出答案。 https://unix.stackexchange.com/a/441817/5132 https://unix.stackexchange.com/a/283543/5132 telcoM 2019-03-11T01:24:40+08:002019-03-11T01:24:40+08:00 您以前是否使用过任何用户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来结束 shell 会话,而不是kill -9首先kill -KILL避免这个问题。 roaima 2019-03-11T01:58:54+08:002019-03-11T01:58:54+08:00 你写了 我进一步分别为每个用户打开两个终端会话 然后在评论中你澄清说在打开一个新的终端窗口后 然后我使用“su - username”登录到另一个用户 打开终端窗口会生成utmp. 该su命令没有。因此,您打开的每个窗口都将注册到您登录的原始用户帐户。
这是你的思维错误。 您没有登录。
su
不创建登录会话。它不是登录机制。它“切换用户”以在不同用户帐户的支持下运行程序,将特权(该帐户的特权)添加到运行它的现有登录会话的用户可用的全部特权中。由这些不同命令报告的登录数据库列出了登录会话。在现有会话中添加权限自然不会改变它。
(一些 GUI 终端模拟器,但不是全部,为它们提供的每个模拟终端添加登录数据库条目。你的是,但那不是 这样做的。在你开始使用它在 shell 中
su
运行命令之前很久就添加了该条目su
终端。)进一步阅读
您以前是否使用过任何用户
test
会话kill -9
?根据操作系统及其处理
utmp
/wtmp
文件更新的方式,终止用户会话kill -9
可能会导致其在utmp
文件中的会话记录处于“会话处于活动状态”状态。当初始化使用相同(伪)TTY 设备的新会话时,写入
utmp
条目的代码会看到该 TTY 设备的插槽已被活动条目使用,并使用下一个空闲插槽。然后,类似 或 的命令
w
有who
一个finger
合理的期望,即一次只有一个用户可以使用 TTY 设备,因此一旦他们为特定 TTY 设备找到一个条目,他们就不会再寻找任何其他的……所以他们显示错误的、陈旧的条目,而不是实际当前的条目。该
utmpdump
命令可用于将二进制utmp
文件转储为文本格式,以查看是否发生了这种 utmp 损坏。然后,您可以编辑文本版本以删除过时的条目,并使用删除损坏的条目utmpdump -r
来重建新的二进制utmp
文件。或者,如果您可以让所有用户暂时注销,只需让其他所有人注销,将 utmp 文件截断为零大小,注销并重新登录。
并且在将来,请使用
kill -HUP
来结束 shell 会话,而不是kill -9
首先kill -KILL
避免这个问题。你写了
然后在评论中你澄清说在打开一个新的终端窗口后
打开终端窗口会生成
utmp
. 该su
命令没有。因此,您打开的每个窗口都将注册到您登录的原始用户帐户。