进一步阅读

进一步阅读

考虑我在安装过程中创建了一个用户“ test”,我用它来登录我的系统。我的根用户是“ root”。我进一步分别为每个用户打开两个终端会话。现在的问题是当我输入“ w”、“ who”甚至“ finger”命令时(在我的根终端会话中)列出所有登录的用户,我看到“ test”用户进来两次(使用不同的 TTY),实际上应该是 ' test' & ' root'。即使我创建一个新用户 ' test1',我仍然看到我的原始用户名 ' ' 是当前登录用户的 , ,命令test的输出。如下所示:wwhofingerRHEL7终端 为什么这样?

PS:使用RHEL7

答案1

新的终端窗口,然后我用su - username它来登录其他用户

这是你的思维错误。 你是不是在登录。

su不创建登录会话。它不是登录机制。它“切换用户”以在不同用户帐户的支持下运行程序,将权限(该帐户的权限)添加到该用户可用的权限总数中。现有登录会话它运行在。

由这些各种命令报告的登录数据库列出了登录会话。添加权限现存的当然,session 不会改变它。

(一些 GUI 终端模拟器(但不是全部)为它们提供的每个模拟终端添加登录数据库条目。您的是,但那是不是 su正在做。在您su使用该终端在 shell 中运行命令之前很久就添加了该条目。)

进一步阅读

答案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 -HUPto 结束 shell 会话而不是kill -9kill -KILL来首先避免此问题。

答案3

你写了

我进一步分别为每个用户打开两个终端会话

然后在评论中您澄清了在打开新的终端窗口后

然后我使用“su - 用户名”登录其他用户

打开终端窗口会生成 中的条目utmp。该su命令没有。因此,您打开的每个窗口都将注册到您登录的原始用户帐户。

相关内容