北京工业大学 2017——2018 学年第 1 学期
《操作系统安全》实验报告
院 系: 信息学部
学 号: S201761169
姓 名: 赵宇
指导老师: 诗伟敏
完成时间: 2017/10/30
教师评语:
成绩: 指导老师签字:
评阅日期: 年 月 日
《操作系统安全》实验成绩评定表
注:详见“《操作系统安全》实验评分标准-研究生 2017”文档
课程名称
操作系统安全
学分
2.0
开课学期
2017-2018-1
任课教师
侍伟敏
Linux 操作系统安全登陆设计与实现(总分 100)
考核项
分值
得分
第一考核项:
30
第二考核项:
40
第三考核项:
25
第四考核项:
5
总分
备注
目录
一、PAM 简介 .............................................................................................................. 4
二、PAM 的应用开发 .................................................................................................. 5
2.1 PAM 框架概览 ................................................................................................. 5
2.2 在应用程序中使用 PAM 认证 ....................................................................... 5
2.3 怎样开发 PAM 服务模块 ............................................................................... 7
三、PAM 接口库源代码分析 ...................................................................................... 9
3.1 PAM 接口库主要数据结构 ............................................................................. 9
3.2 PAM 接口库重要内部函数分析 ................................................................... 10
3.3 PAM 认证 API 的实现 ................................................................................... 11
四、Linux 操作系统安全登陆设计 ........................................................................... 13
4.1 Linux-PAM 配置文件 .................................................................................... 13
4.2 MyPAM 程序编写 .......................................................................................... 17
4.3 编译 MyPAM.c 文件 ..................................................................................... 19
4.4 生成动态链接库 so 文件 .............................................................................. 19
4.5 编写 login 和 lightdm 登录文件 ................................................................... 20
五、Linux 操作系统安全登陆实现 ........................................................................... 22
5.1 必要工具下载................................................................................................ 22
5.2 使用 vim 编辑器编写 pam 程序 .................................................................. 24
5.3 修改 login 和 lightdm 登录文件 ................................................................... 28
5.4 替换原登录文件............................................................................................ 31
5.5 编写 PC 密钥程序 ......................................................................................... 32
六、测试 Linux 安全登陆 .......................................................................................... 34
6.1 调整系统时间................................................................................................ 34
6.2 命令行登录测试............................................................................................ 34
6.3 图形界面登录测试........................................................................................ 36
七、总结...................................................................................................................... 38
一、PAM 简介
身份认证是操作系统安全的重要机制之一,系统通过认证机制核查用户的身
份证明,并作为用户进入系统的判定条件,是防止恶意用户进入系统的第一道门
槛。近年来认证理论和技术得到了迅速发展,产生了各种认证机制,如口令机制,
RSA, DCE, kerberos 认证体制,S/Key 和基于智能卡的身份认证等。然而,当系
统中引入新的认证机制时,一些系统入口登录服务如 login, rlogin 和 telnet 等应
用程序就必须改写以适应新的认证机制。为了解决这个问题,1995 年 Sun 公司
的 Vipin Samar 和 Charlie Lai 提出了 PAM(Pluggable Authentication Modules),并
将其应用在 Solaris 系统上。PAM 框架将应用程序与具体的认证机制分离,使得
系统改变认证机制时,不再需要修改采用认证机制的应用程序,而只要由管理员
配置应用程序的认证服务模块,极大地提高了认证机制的通用性与灵活性。
二、PAM 的应用开发
2.1 PAM 框架概览
PAM 即可插拔认证模块。它提供了对所有服务进行认证的中央机制,适用
于 login,远程登录(telnet,rlogin,fsh,ftp,点对点协议(PPP)), su 等应用程序中。
系统管理员通过 PAM 配置文件来制定不同应用程序的不同认证策略;应用程序
开发者通过在服务程序中使用 PAM API(pam_xxxx( ))来实现对认证方法的调用;
而 PAM 服务模块的开发者则利用 PAM SPI 来编写模块(主要是引出一些函数
pam_sm_xxxx( )供 PAM 接口库调用),将不同的认证机制加入到系统中;PAM
接口库(libpam)则读取配置文件,将应用程序和相应的 PAM 服务模块联系起
来。PAM 框架结构如图所示。
图 PAM 框架结构图
其中,pamh 是一个 pam_handle 类型的结构,它是一个非常重要的处理句柄,
是 PAM 与应用程序通信的唯一数据结构,也是调用 PAM 接口库 API 的唯一句
柄。
另外,如上图所示的服务模块分 auth(认证管理)、account(账号管理)、session
(会话管理)、passwd(口令管理)四种类型,各个类型模块的作用以及配置文
件的四个组成部分模块类型、控制标志、模块路径、模块参数等。
2.2 在应用程序中使用 PAM 认证
每个使用 PAM 认证的应用程序都以 pam_start 开始,pam_end 结束。PAM
还提供了 pam_get_item 和 pam_set_item 共享有关认证会话的某些公共信息,例
如用户名,服务名,密码和会话函数。应用程序在调用了 pam_start ()后也能够
用这些 APIs 来改变状态信息。实际做认证工作的 API 函数有六个(以下将这六
个函数简称为认证 API):