为什么直接从bash调用agetty似乎没有任何效果?

为什么直接从bash调用agetty似乎没有任何效果?

我尝试/usr/bin/agetty -在终端模拟器(基于 X 的和基于内核的)中从 bash 进行调用,然后它要求我输入用户名,但是在输入该用户名后,它只是“冻结”了一会儿,然后让我返回进入我原来的 bash 推广。

我开始想知道,agetty 是systemd使用 ttyx 设备作为服务启动的,execve(/usr/bin/login)因此它会给我登录升级,因为登录配置为pam_systemd,因此将创建一个 systemd 会话。但这不是我agetty -如上所述直接运行时得到的结果,当我检查时没有创建新会话systemctl status

然后我想如果是因为agetty以普通用户身份运行,它可能会检查自己的EUID或其他东西,但这只会导致我的bash在我输入用户名后退出。

好吧,我systemctl status又检查了一下,它告诉我 systemd 运行这个程序/sbin/agetty -o -p -- \u --noclear tty2 linux,好吧,我在 tty2 上以 root 身份登录,然后运行agetty -o -p -- \u --noclear - linux,我得到了和一开始完全相同的情况——我又回到了 bash。

我需要理解这些实验结果。

我正在使用 ArchLinux,/usr/bin/login并且/usr/bin/agetty都来自软件包util-linux 2.33-2

答案1

显然“递归login”曾经用来做一些有用的事情,但现在人们预计它不会在 Linux 上工作一段时间了。

我建议坚持使用更常用的技术,例如非递归login、 orsusudo,因为对于当前系统来说,这些技术可以更好地理解、记录等。

如果可能,请避免su使用su -l,因为这会为您提供一组干净的环境变量。

我愿意不是知道为什么您会看到您所描述的具体结果。但是,如果您确实需要了解“递归”的行为login,我可以想到您需要了解的两个具体点,即它可能会出现什么问题。

错误

不支持未记录的 BSD -r 选项。某些 rlogind(8) 程序可能需要这样做。

在过去的美好时光中,递归登录不再有效;对于大多数用途,su(1) 是令人满意的替代品。事实上,出于安全原因,login 执行 vhangup() 系统调用来删除 tty 上任何可能的侦听进程。这是为了避免密码嗅探。如果使用命令登录,则周围的 shell 会被 vhangup() 杀死,因为它不再是 tty 的真正所有者。

--man login

如果您使用 systemd,它会跟踪登录会话,但不允许它们嵌套。这是一个刻意的选择关于 systemd 登录会话应如何与“audit会话”交互。 su/sudo不要转义当前的“audit会话”。

目前,我每次运行时都可以看到 systemd 嘈杂地记录此设计sudo。不要问我为什么这被认为是可取的......

sudo[1079]: pam_systemd(sudo:session): Cannot create session: Already running in a session

全面披露:引文man login继续:

如果使用命令登录,则周围的 shell 会被 vhangup() 杀死,因为它不再是 tty 的真正所有者。通过exec login在顶级 shell 或 xterm 中使用可以避免这种情况。

相关内容