Linux 用户认证与 PAM 系统详解
1. 系统安全与用户认证概述
在系统安全方面,存在诸多入侵系统的途径。例如,若创建一个 setuid root 的 bash shell 副本,任何本地用户都能运行它并完全控制整个系统。而且,即使是具有 setuid root 权限的特殊程序,若存在漏洞也会带来安全风险。
为避免系统被入侵,确保用户通过用户名和密码进行认证是关键措施之一。多用户系统需为用户提供基本的身份识别与认证安全支持。身份识别用于确定用户是谁,认证要求用户证明自己的身份,授权则用于定义和限制用户的操作权限。
2. Linux 内核与用户认证
Linux 内核仅通过用户的数字 ID 来识别进程和文件的所有者,了解授权规则以执行 setuid 程序和处理用户 ID 的切换,但对认证相关的用户名、密码等信息一无所知。认证相关操作主要在用户空间进行。
3. 获取用户信息的传统方法
在传统 Unix 系统中,用户进程获取用户名的步骤如下:
1. 使用系统调用 geteuid()
向内核请求有效用户 ID。
2. 打开 /etc/passwd
文件并从头开始读取。
3. 读取 /etc/passwd
文件的一行。若无可读内容,则表示未找到用户名。
4. 解析该行,通过冒号分隔字段,第三字段为当前行的用户 ID。
5. 比较步骤 4 中的用户 ID 与步骤 1 中的 ID。若相同,步骤 4 中的第一字段即为所需用户名,进程可停止搜索并使用该名称。
6. 转到