我尝试在终端模拟器(基于X和基于内核的)中从bash调用/usr/bin/agetty -,然后它要求我输入用户名,但是在输入用户名之后,它只是“冻结”了一会儿,然后把我放回原来的bash推广中。
我开始怀疑,agetty是由systemd使用ttyx设备和execve(/usr/bin/login)作为服务启动的,因此它将为我提供登录促进,因为登录是用pam_systemd配置的,因此将创建一个systemd会话。但是,正如我前面提到的,当我直接运行agetty -时,这不是我得到的结果,当我检查systemctl status时,没有创建任何新的会话。
然后我想,如果是因为agetty作为普通用户运行,它可能会检查自己的EUID或其他东西,但这只会导致我的bash在输入用户名后退出。
好的,我再次检查了systemctl status,它告诉我系统以/sbin/agetty -o -p -- \u --noclear tty2 linux的身份运行这个程序,好吧,我以根用户身份登录tty2,然后运行agetty -o -p -- \u --noclear - linux,我得到了与最初完全相同的情况--我又回到了bash。
我需要了解这些实验结果。
我使用的是ArchLinux、/usr/bin/login和/usr/bin/agetty,它们都来自util-linux 2.33-2包。
发布于 2018-12-31 11:59:44
显然,“递归login”曾经做过一些有用的事情,但现在已经有一段时间没有在Linux上工作了。
我建议坚持使用更常用的技术,如非递归login,或su和sudo,因为对于当前系统,这些技术有更好的理解和文档化等。
在可能的情况下,尽量避免使用su,以支持su -l,因为这将为您提供一组干净的环境变量。
我不知道你为什么看到你描述的具体结果。但是,如果您确实需要理解“递归login”的行为,我可以想到两点,您需要理解,关于它可能出错的地方。
BUGS -不支持无文档的BSD -r选项。这可能是一些rlogind(8)程序所需要的。递归登录(在过去的好时光中是可能的)已不再起作用;在大多数情况下,su(1)是令人满意的替代品。实际上,出于安全考虑,登录会执行一个vhangup()系统调用,以删除tty上任何可能的侦听进程。这是为了避免密码嗅探。如果一个人使用命令登录,那么周围的shell就会被vhangup()杀死,因为它不再是tty的真正所有者。--
man login
如果您使用的是systemd,它会跟踪登录会话,但不允许嵌套它们。这是一个关于系统登录会话应该如何与"audit会话“交互的D11。su / sudo不能逃避当前的"audit会话“。
目前,每当我运行sudo时,我也可以看到系统对此设计进行了大量的记录。别问我为什么这被认为是可取的..。
sudo[1079]: pam_systemd(sudo:session): Cannot create session: Already running in a session完全披露:来自man login的引用继续:
如果一个人使用命令登录,那么周围的shell就会被vhangup()杀死,因为它不再是tty的真正所有者。可以通过在顶级shell或xterm中使用
exec login来避免这种情况。
https://unix.stackexchange.com/questions/491543
复制相似问题