![当您登录到 shell 时,哪个程序负责处理凭证的评估?](https://linux22.com/image/1026081/%E5%BD%93%E6%82%A8%E7%99%BB%E5%BD%95%E5%88%B0%20shell%20%E6%97%B6%EF%BC%8C%E5%93%AA%E4%B8%AA%E7%A8%8B%E5%BA%8F%E8%B4%9F%E8%B4%A3%E5%A4%84%E7%90%86%E5%87%AD%E8%AF%81%E7%9A%84%E8%AF%84%E4%BC%B0%EF%BC%9F.png)
首次启动时,您会看到黑屏和闪烁的提示,那是什么程序?哪个程序负责处理凭据的评估?或者更确切地说,它是源代码的哪个组件?我可能自己搞混了,但我认为各种用户 shell 是在用户身份验证后加载的。
...这可能意味着 bash 以单用户模式启动,然后 bash 检查凭据并启动用户 shell?(我认为这就是它的工作原理)
(我有兴趣在凭证检查过程中添加一项功能,但我正在查看 bash 源代码,不知道从哪里开始。)
答案1
我自己也只有一个基本的了解,但是我会发布这个来帮助你入门:
首先,您不是登录到 shell,而是登录到(虚拟)终端。
程序
getty
打开一个 tty 端口,提示输入登录名并调用登录程序(/bin/login
默认情况下 - 尽管 Linuxagetty
可能配置为使用非标准登录程序)登录程序执行身份验证和会话设置,包括初始化环境和调用用户的登录 shell。
在当前的 Ubuntu 系统中,getty
作为 systemd 服务进行管理(例如[email protected]
虚拟终端 tty1),并login
使用可插入身份验证模块 (PAM) 子系统进行身份验证 - 特别是,该pam_unix
模块“用于传统密码身份验证”。
对于您所述的目标(“在凭证检查过程中添加一项功能”)您可能需要考虑实现自定义 PAM 模块,并将其插入到 PAM 堆栈中的适当位置;此处描述了该模块的模板:
也可以看看:
10.1. 通过终端登录摘自《Linux 系统管理员指南》:第 10 章 登录和注销